Skip to content

Retire `mysql_real_escape_string()`, première étape pour passer à PDO et PHP7

Francois Gannaz requested to merge 12-no-mysqlrealescapestring into master

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)

Merge request reports