Quelle est la différence entre ces deux requêtes

Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 505
Enregistré le: 30 Juil 2014

Quelle est la différence entre ces deux requêtes

Message le Jeu Mar 09, 2017 13:58

Bonjour,

Dans la requête suivante, la ligne $params est neutralisée par //.
Mais ça fonctionne dans les deux cas.
Quelle est la meilleure solution, à votre avis ? Si on supprime // pour activer la ligne en question, est-ce alors ce qu'on nomme une "requête préparée".
Et pourquoi choisiriez-vous une requête plutôt qu'une autre ?


Code: Tout sélectionner
$sql = "
SELECT
dic_posts.post_title
FROM
dic_posts
WHERE
dic_posts.ID=".$id."
";
$stmt = $dbh->prepare ($sql); /* On prépare la requête */
/** On prépare les paramètres */
//$params = array(':lettre' => $_GET['lettre'].'%');
/** On execute la requete */
$stmt->execute();
while($lettre= $stmt->fetch(PDO::FETCH_OBJ))
{
$titre=$lettre->post_title;
}


spout
WRInaute accro
WRInaute accro
 
Messages: 8335
Enregistré le: 14 Mai 2003

Re: Quelle est la différence entre ces deux requêtes

Message le Jeu Mar 09, 2017 14:42

Le paramètre :lettre n'est pas utilisé donc c'est normal que ça ne change rien commenté ou pas.
NB: par contre pas d'utilisation des binded params pour $id ???

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 505
Enregistré le: 30 Juil 2014

Re: Quelle est la différence entre ces deux requêtes

Message le Jeu Mar 09, 2017 15:26

Salut spout,
spout a écrit:Le paramètre :lettre n'est pas utilisé donc c'est normal que ça ne change rien commenté ou pas.
NB: par contre pas d'utilisation des binded params pour $id ???


Effectivement, :lettre n'est pas utilisé... Le cas échéant, ce serait donc bien une requête préparée, c'est ça ? Alors que là, c'est du vieux PDO périmé, j'ai bon ?

Bind params, c'est ça si j'en crois le manuel :
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

Ca va m'avancer à quoi, si ce n'est de compliquer ma requête qui fonctionne déjà ?
Je précise que pour l'heure, c'est du code en production. Je ne m'inquiète pas trop de la sécurité. Mais dans un deuxième temps, oui, bien sûr.


spout
WRInaute accro
WRInaute accro
 
Messages: 8335
Enregistré le: 14 Mai 2003

Re: Quelle est la différence entre ces deux requêtes

Message le Jeu Mar 09, 2017 15:35

Qd je disais pas d'utilisation, c'était dic_posts.ID=".$id." au lieu de dic_posts.ID=? ou dic_posts.ID=:id.

C'est pr éviter les failles, vu que les paramètres seront échappés.
Imagine si:
Code: Tout sélectionner
$id = "42;DELETE FROM dic_posts;--"

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 505
Enregistré le: 30 Juil 2014

Re: Quelle est la différence entre ces deux requêtes

Message le Jeu Mar 09, 2017 16:02

Oui...

En fait, ce sont des variables que j'utilise dans l'admin, protégée par un .htaccess.
Bon bien sûr, deux précautions valent mieux qu'une. Donc à réception, je les fitre quand même par un FILTER_SANITIZE.
Qu'apportent de plus les paramètres liés ?


Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :