Tuto Livre d'or, petite question sur PDO
J'ai remarqué que sur les 3 requètes , il y a n'a une en "query" et non prepare comme les autres.
Une raison ?
Seconde question, un peu en dehors du tuto mais ca reste le même thème !
Tu utilises
bindParam()
pour protéger les données, sur la doc il y a aussi
bindValue
pour également protéger, mais je n'ai pas compris la nuance, serai tu me l'expliquer stp ?
Merci
Réponses apportées à cette discussion
Salut,
La méthode prepare() permet de réaliser des requêtes préparées, c'est-à-dire des requêtes SQL contenant des paramètres qui seront traités par le SGBD indépendamment. Une requête préparée est plus sécurisée car les paramètres sont gérés par le SGBD mais elles sont aussi plus performantes lorsqu'elles sont exécutées plus de deux fois avec avec des paramètres différents. Une requête préparée est analysée et compilée au premier appel, puis mise en cache sur le serveur afin d'être exécutée plus rapidement aux appels suivants. La méthode query() ne contient qu'une requête simple sans paramètre. De plus, elle n'est pas réexécutée dans la suite du programme, donc il n'est pas nécessaire d'utiliser prepare(), query() suffit.
bindParam() et bindValue() sont identiques mais bindParam() enregistre une variable par référence contrairement à bindValue(). Par conséquent, avec bindParam(), tu bind une seule fois et ensuite tu changes tes variables et tu exécutes ta requête préparée avec execute(). Alors qu'avec bindValue(), tu es obligé de réappeler bindValue() à chaque fois que tu souhaites changer la valeur d'un paramètre d'une requête préparée.