Retire `mysql_real_escape_string()`, première étape pour passer à PDO et PHP7
Plutôt que de faire la migration complète, je propose un passage à PHP7 en plusieurs étapes. Ce sera mieux gérable d'introduire moins de bugs à la fois ;-) Idéalement, il faudrait en avoir fini à la fin de l'année, quand PHP5 sera officiellement abandonné.
Cette première étape retire tous les usages de mysql_real_escape_string()
dans le code source de LabNbook.
Dans quasiment tous les cas, la nouvelle syntaxe est de la forme DB::query("SELECT ... WHERE a = ?", [$x])
au lieu de query("SELECT ... WHERE a = '" . mysql_real_escape_string($x) . "'")
.
Idem pour les non-SELECT, en utilisant DB::exec("INSERT...")
au lieu de DB::query()
.
Il reste une exception où j'ai conservé un mécanisme sans "?", en remplaçant "'" . mysql_real_escape_string($x) . "'"
par DB::getPdo()->quote($x)
.
J'aurais pu l'éviter, mais la réécriture aurait été lourde (requête SQL avec un IN(SELECT ... UNION ...)
).
Il est possible que j'introduise des bugs avec ces changements qui ne sont pas testés exhaustivement (mes tests automatiques ont déjà intercepté une erreur). Par contre je suis certain de corriger des bugs, parce que plusieurs requêtes SQL ne protégeaient pas leurs paramètres. Par exemple (de mémoire), les noms des labdocs dans les conversations (plantage en cas de '). Idem pour des noms d'utilisateurs, etc.
See #12 (closed)