Erreur mysql_real_escape_string()

Bonjour à tous.

Je suis en train de développer un module de suivi administratif de la formation continue (ça avance)…
Je viens ce matin de déplacer l’appli d’un serveur de dev à un autre. Le code étant rigoureusement identique, tout fonctionne parfaitement sur le premier, mais je rencontre le problème classique lors de l’utilisation de la fonction mysql_real_escape_string() sur le second. Le message est :« Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user ‹ www-data ›@‹ localhost › (using password: NO) in /var/www/dolibarr-2.7.1/htdocs/agefodd/agefodd_stagiaire.class.php on line 98 »

J’ai pas mal graté sur le web ce matin, mais pas sans trop de résultat. La fonction est bien disponible sur le nouveau serveur (PHP Version 5.2.6-1).
Il pourrait falloir passer le link_identifier en paramètre, mais comment le récupérer depuis ma classe de connexion, et pourquoi cela fonctionne sur le premier serveur?

Merci et bonne journée.

nous n’utilisons pas cette fonction, pourquoi tu n’utilises pas la classe mysql de dolibarr pour effectuer tes requêtes ?

C’est ce que je pense faire :wink:
Je me suis appuyé sur la doc et ai généré un fichier « agefodd_stagiaire.class.php » (comme tu peux le constater dans le message d’erreur de mon message précédent).

J’utilise donc bien $resql=$this->db->query($sql);

Mais dans le fonctions d’update et de create, je cherche à protéger au minimum mes input dans mysql (cf rubrique « // Clean parameters » du fichier auto-généré dans Dolibarr).
Bref, j’ai peut-être raté un truc…

Je voudrais quand même comprendre pourquoi mysql-real-escape-string fonctionne sur un serveur et pas sur l’autre…

Merci d’avance.

J’ose espérer que dolibarr vérifie ce qui entre dans la base !

Pour mysql_real_escape_string, il est mieux d’utiliser mysqli qui, en mode objet, n’a pas besoin du link_identifier.

Je ne comprends jamais trop pourquoi (mais je ne suis pas vraiment développeur) tout le monde réinvente la roue alors qu’il existe la classe PDO qui est faite pour faciliter, sécuriser, accélérer les accès SQL et permettre simplement d’utiliser mysql, postgre, sqlite, oracle…

Tu peux protéger tes champs en utilisant addslashes plutot que mysql_real_escape_string