par
@rthur » 19 mars 2017, 22:40
La raison est un peu bizarre, mais c'est logique que ça ne fonctionne pas avec LIMIT
En réalité, quand on utilise PDO::execute() les paramètres qui sont injectés le sont sous la forme de chaine de caractères c'est à dire avec des guillemets et donc ta requête devient :
DELETE FROM news WHERE type='toto' LIMIT '2'
Ce qui n'est pas correcte.
La solution est d'utiliser bindValue() en précisant que le paramètre est un entier pour que la variable soit passée sans guillemet
$bdd->bindValue('limit_val', $num, PDO::PARAM_INT);
La raison est un peu bizarre, mais c'est logique que ça ne fonctionne pas avec LIMIT
En réalité, quand on utilise PDO::execute() les paramètres qui sont injectés le sont sous la forme de chaine de caractères c'est à dire avec des guillemets et donc ta requête devient : [sql]DELETE FROM news WHERE type='toto' LIMIT '2'[/sql]Ce qui n'est pas correcte.
La solution est d'utiliser bindValue() en précisant que le paramètre est un entier pour que la variable soit passée sans guillemet
[php]$bdd->bindValue('limit_val', $num, PDO::PARAM_INT);[/php]