Gros bogue avec PDO

Si vous exécutez une requête avec une apostrophe et un point d'interrogation, par exemple: SELECT * FROM `users` WHERE username = 'ch?\'ris', vous aurez l'erreur : SQLSTATE[HY093]: Invalid parameter number: no parameters were bound.

En fait, bien que le point d'interrogation soit dans une chaîne de caractères délimitée par des apostrophes, la présence de l'apostrophe supplémentaire fait que PDO l'interprète comme un joker et tente de le remplacer par un paramètre.

Le problème peut donc entrainer un plantage sur une recherche.

C'est un problème assez ancien et qui n'a été résolu que depuis PHP 5.2.5. Il faut donc mettre à jour PHP ou substituer Mysqli à PDO, ce qui avec le Zend Framework et son abstraction de base de données se fait sans douleur.

Voir aussi

  • Le bogue PHP : http://bugs.php.net/bug.php?id=44251
  • Le bogue affecte ZF si PDO est utilisé : http://framework.zend.com/issues/browse/ZF-1343

Ajouter un commentaire