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

Alorsladaccord

WRInaute occasionnel
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:
$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
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 occasionnel
Salut spout,
spout a dit:
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
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:
PHP:
<span class="syntaxdefault">$id </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"42;DELETE FROM dic_posts;--"</span><span class="syntaxkeyword">;&nbsp;</span><span class="syntaxdefault"></span>
 

Alorsladaccord

WRInaute occasionnel
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 ?
 

Discussions similaires

Haut