13
Déc
12

Warning: Missing argument 2 for wpdb::prepare()





Si vous êtes passés à WordPress 3.5, vous avez probablement plein d’erreurs liées à une modification dans le prototype de la méthode prepare de la classe wpdb. Cette méthode est utilisée pour sécuriser une requête avant son passage à la base de données. Beaucoup de plugins et de themes utilisent cette méthode de manière inadaptée actuellement. Jusqu’à présent cela ne posait pas de problème particulier mais en version 3.5, les développeurs de WordPress ont décidé de changer cela et un warning est généré lorsque la méthode est appelée sans le nombre de paramètres requis. Le premier paramètre est la requête et les suivants sont les variables qui doivent être sécurisées avant leur injection dans la requête.

Pour reconnaître le warning, il est très caractéristique :

Warning: Missing argument 2 for wpdb::prepare(), called in … and defined in … wp-includes/wp-db.php on line 990

Le warning apparaît lorsque la requête est passée à la méthode sans variable à sécuriser. Cela peut être parce qu’il n’y a pas de variable à sécuriser ou parce que la variable à sécuriser a déjà été incluse dans la requête, de manière sécurisée (via un esc_sql) ou non sécurisée. Et c’est là où les développeurs de WordPress voulaient en arriver. Ils veulent forcer les développeurs de plugins et de thèmes à sécuriser leurs requêtes et donc à utiliser la méthode prepare de manière appropriée.

Si vous en avez marre de ces warnings intempestifs et qu’il n’y aucune mise à jour appropriée, vous pouvez toujours régler le problème en corrigeant vous même les appels invalides. Pour cela, il suffit de passer une variable bidon. Par exemple, un appel invalide : $wpdb->prepare($query); deviendra $wpdb->prepare($query,0);. Et voilà, cela suffira à régler le problème mais pas à sécuriser vos requêtes s’il y a des variables à sécuriser avant le passage de la requête. Pour sécuriser les variables, il faut vérifier leur contenu et ensuite, les passer en variable en utilisant la syntaxe du sprintf dans la requête mais ça c’est une autre histoire…







L'autre monde | Thème liquide par Olivier