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

Messages: 522

Enregistré le: 30 Juil 2014

Message le Jeu Mar 09, 2017 14: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;
}
Haut
4 Réponses
Messages: 8508

Enregistré le: 14 Mai 2003

Message le Jeu Mar 09, 2017 15: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 ???
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Jeu Mar 09, 2017 16: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.
Haut
Messages: 8508

Enregistré le: 14 Mai 2003

Message le Jeu Mar 09, 2017 16: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;--"
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Jeu Mar 09, 2017 17: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 ?
Haut

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.