Marqueur nommé ou interrogatif pour les requetes préparées ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 30 Décembre 2018.

  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Bonjour,

    je commence à me poser vraiment la question concernant les marqueurs. Il est vraiment que les marqueurs interrogatifs sont vraiment plus simple à mettre en place, mais qu'elle est réellement la préconisation lorsque l'on fait des requetes préparées ? J'ai l'impréssion que bindValue et les différents paramètres que l'on ajoute lors des requêtes nommés ne sont que accessoire pour la sécurité.

    Marqueur interrogatif :

    Code:
    $sql = "SELECT id FROM test WHERE id_ad = ? AND title LIKE  ? LIMIT 1";
     
    $requete = $bdd -> prepare($sql);
    $requete->execute(array($id_ad, $title));
    Marqueur nommé :

    Code:
    $sql = "SELECT id FROM test WHERE id_ad = :id_ad AND title LIKE  :title LIMIT 1";
     
    $requete = $bdd -> prepare($sql);
     
    $requete ->bindValue(':id_ad', $id_ad, PDO::PARAM_INT);
    $requete ->bindValue(':title', $title, PDO::PARAM_STR);
     
    $requete->execute();
    Merci pour vos conseils.
     
  2. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 062
    J'aime reçus:
    108
    C'est juste que quand c'est nommé, c'est plus simple de s'y retrouver, moins d'erreur possible : quand on modifie la requête, ajoute un paramètre entre deux, il faut pas se tromper dans l'ordre quand ce n'est pas nommé.
    Quand c'est possible, j'utilise les paramètres nommés, mais j'ai eu un cas où ça n'était pas possible (à la cause de la base qui ne les acceptait pas où de l'ORM je ne sais plus).
     
  3. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Jusqu'a présent j'utilise essentiellement les marqueurs nommés et j'ai l'impression d’être un peu un extraterrestre quand je consulte les forums. Beaucoup de monde privilégie les marqueur interrogatifs visiblement.
     
  4. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Et finalement quel est l'interet de bindValue et PDO::pARAM_INT ou PDO::pARAM_STR si on peut faire sans ?

    Est ce que c'est pour renforcer la sécurité contre les injection sql par exemple ?
     
  5. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 062
    J'aime reçus:
    108
    Ah bon ! Peut-être en PHP, mais je fréquente d'autres domaines (Delphi, .NET...) où c'est le contraire, où le plus important est que ce soit un code clair et compréhenisble pour un travail en équipe professionnel...

    A priori ici non, ça ne semble servir à pas grand chose (et même à rien) d'après ce que j'ai lu, mais il faudrait investiguer davatange.
    Car des gens disent que ça ne lève même pas d'erreur (si on met par exemple un integer alors qu'on attend une string).
    Le seul cas utile, ça semble être de forcer la conversion d'un integer en booléen ou inversement d'un booléen en integer.
     
  6. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 734
    J'aime reçus:
    233
    Je préfère clairement les paramètres nommés.
     
  7. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    spout tu es plutot partisan de ceci :

    Code:
    $sql = "SELECT id FROM test WHERE id_ad = :id_ad AND title LIKE  :title LIMIT 1";
    
    $requete = $bdd -> prepare($sql);
    
    $requete->execute(array('id_ad' => $id_ad, 'title' => $title));
    ou cela ? :

    Code:
    $sql = "SELECT id FROM test WHERE id_ad = :id_ad AND title LIKE  :title LIMIT 1";
    
    $requete = $bdd -> prepare($sql);
    
    $requete ->bindValue(':id_ad', $id_ad, PDO::PARAM_INT);
    $requete ->bindValue(':title', $title, PDO::PARAM_STR);
     
    $requete->execute();
     
  8. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 734
    J'aime reçus:
    233
    C'est pas comparable, mais j'utilise plus souvent le 1°, la différence c'est qu'il va mettre des quotes sur un string et pas sur un integer. Avec MySQL osef, mais avec un vrai SGBD comme Oracle ou PostgreSQL pas.

    Par contre je préfère :
    PHP:
    DB::select("SELECT id FROM test WHERE id_ad = :id_ad AND title LIKE  :title"compact('id_ad''title'));
    Ou encore mieux :
    PHP:
    Test::whereIdAd($idAd)->whereTitle($title)->get()->first();
     
    #8 spout, 1 Janvier 2019
    Dernière édition: 1 Janvier 2019
  9. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Tu utilise quelle class pour les requetes ?
     
  10. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 734
    J'aime reçus:
    233
Chargement...
Similar Threads - Marqueur nommé interrogatif Forum Date
marqueurs nommés vs marqueurs interrogatifs requête préparée Développement d'un site Web ou d'une appli mobile 16 Janvier 2019
Search Console - marqueur de données Google : l'entreprise, les sites web, les services 26 Juin 2017
Onglet Marqueur de données et balisage schema.org Débuter en référencement 9 Janvier 2017
Un site institutionnel et une boutique en ligne : 1 ou 2 marqueurs GA ? Débuter en référencement 21 Décembre 2016
Marqueur de données ou structures de données Débuter en référencement 7 Août 2013
deplacement de marqueur Google : l'entreprise, les sites web, les services 21 Mars 2012
Google Map : Marqueur déplaçable et récupération coordonnées GPS dans MySQL Développement d'un site Web ou d'une appli mobile 9 Août 2010
Marqueur XiTi sur Blogspot / Blogger Développement d'un site Web ou d'une appli mobile 11 Mai 2009
Problème de marqueur XITI sous Firefox Développement d'un site Web ou d'une appli mobile 1 Mai 2009
marqueurs xiti Administration d'un site Web 22 Février 2009
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice