IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Update quote et sécurité


Sujet :

Zend_Db PHP

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut Update quote et sécurité
    Salut à tous,

    J'expérimente un peu ZF et donc ZendDb. J'utilisais jusqu'à maintenant PDO avec des requêtes préparée et je suis un peu dérouté lorsque je n'ai plus à écrire de sql.

    Par exemple quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql->update('users',$datas,'id = '.$id);
    La requête est elle préparée ? Le fait d'utiliser quote() sur les chaine de $datas et des int/floatval sur les chiffres me met il à l'abris de toute injection sql ?

    merci
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Voici la méthode de update

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
         */
        public function update($table, array $bind, $where = '')
        {
            /**
             * Build "col = ?" pairs for the statement,
             * except for Zend_Db_Expr which is treated literally.
             */
            $set = array();
            $i = 0;
            foreach ($bind as $col => $val) {
                if ($val instanceof Zend_Db_Expr) {
                    $val = $val->__toString();
                    unset($bind[$col]);
                } else {
                    if ($this->supportsParameters('positional')) {
                        $val = '?';
                    } else {
                        if ($this->supportsParameters('named')) {
                            unset($bind[$col]);
                            $bind[':'.$col.$i] = $val;
                            $val = ':'.$col.$i;
                            $i++;
                        } else {
                            /** @see Zend_Db_Adapter_Exception */
                            // require_once 'Zend/Db/Adapter/Exception.php';
                            throw new Zend_Db_Adapter_Exception(get_class($this) ." doesn't support positional or named binding");
                        }
                    }
                }
                $set[] = $this->quoteIdentifier($col, true) . ' = ' . $val;
            }
     
            $where = $this->_whereExpr($where);
     
            /**
             * Build the UPDATE statement
             */
            $sql = "UPDATE "
                 . $this->quoteIdentifier($table, true)
                 . ' SET ' . implode(', ', $set)
                 . (($where) ? " WHERE $where" : '');
     
            /**
             * Execute the statement and return the number of affected rows
             */
            if ($this->supportsParameters('positional')) {
                $stmt = $this->query($sql, array_values($bind));
            } else {
                $stmt = $this->query($sql, $bind);
            }
            $result = $stmt->rowCount();
            return $result;
        }
    On peut lire qu'il passe par une méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->quoteIdentifier
    Il faut lire cette méthode et voir ce qu'elle retourne, mais pour faire simple oui , la requête est préparé par le update.

    Tu peux d'ailleurs utiliser la méthode $this->prepare

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AD] Update forcé pour les groupes de sécurité
    Par Bomba dans le forum Sécurité
    Réponses: 0
    Dernier message: 05/12/2008, 17h35
  2. UPDATE en ajoutant un 0 sur un champ de type "char"
    Par doum2 dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/03/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo