Problème mySQL avec apostrophe dans variable

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème mySQL avec apostrophe dans variable

Re: Problème mySQL avec apostrophe dans variable

par Moosh » 29 janv. 2011, 15:37

magic_quotes c'est de la m*rde

utilisez pdo et prepare.

si vous n'y arrivez pas prenez la peine de sécuriser vos variables chaines avec des mysql_real_escape_string()

Re: Problème mySQL avec apostrophe dans variable

par opusincertum » 02 déc. 2010, 02:41

Bon eh bien voilà... j'apprends... Je vais suivre vos bons conseils et oublier les magic_quotes parce que ça fout vraiment la zone...

Merci pour votre aide et vos éclaircissements à une heure si tardive !

Amis codeurs, bonne nuit ! =D>

Re: Problème mySQL avec apostrophe dans variable

par devlop78 » 02 déc. 2010, 02:34

Les magic_quotes sont de faux amis. Ils sont même enlevés dans php6 et c'est une bonne chose. Pour les accents, et mêmes les caractères spéciaux en tout genre, pas de problème. Pour être sûr, utilise mysql_real_escape qui échappera tout ce qu'il faut (et ce sans avoir à t'en soucier), comme il faut.

Re: Problème mySQL avec apostrophe dans variable

par opusincertum » 02 déc. 2010, 02:26

Effectivement, en désactivant les magic_quotes ça marche nickel. Mais n'est-ce pas un peu dangereux de le désactiver ? (je pense aux injections SQL par exemple)

Que me conseilleriez-vous pour gérer au mieux une base qui va être amenée à contenir des accents, etc... Et sachant qu'il va y avoir un risque d'injection SQL du fait que je vais être amené à gérer des users/pass à l'avenir...

Enfin, dans quelle mesure dois-je mettre en place le mysql_real_escape ?

Merci pour votre aide chers amis du net !

Re: Problème mySQL avec apostrophe dans variable

par devlop78 » 02 déc. 2010, 02:20

Et bien j'imagine que tu avais fait quelquechose dans ce genre $album = 'l\'éléphant';

Ce qui donne au final l'éléphant. Donc erreur SQL (et c'est là que c'est étonnant si tu n'as pas d'erreur). Mais si tu tapes $album = 'l\\\'éléphant'; le résultat est l\'éléphant, donc ok pour SQL. De façon générale, il vaut mieux déléguer cette tâche à une fonction appropriée, car l''éléphant aurait tout aussi bien fonctionner (le double simple quote échappe le simple quote en SQL, je l'ai vérifié sur MySQL et sur PostgreSQL).

Re: Problème mySQL avec apostrophe dans variable

par opusincertum » 02 déc. 2010, 02:14

Plus de précisions ? 8-|

Re: Problème mySQL avec apostrophe dans variable

par stealth35 » 02 déc. 2010, 02:12

problème de magic_quote et de mysql_real_escape string :wink:

Re: Problème mySQL avec apostrophe dans variable

par opusincertum » 02 déc. 2010, 02:08

@ devlop78 :
<< L'éléphant >> existe bien dans ta table ? Si oui, vérifie que ta reqête "SET NAMES" correspond bien à l'encodage utilisé sur ta page HTML. Pour éviter les problèmes, je te conseille d'utiliser le même encodage pour tout : tables, SET NAMES, php et html. Je ne peux que t'encourager à utiliser UTF-8.
Oui L\'éléphant existe bien dans ma table. Tout est paramétré en UFT8, y compris avec SET NAMES.

@ moogli
que ce passe t il lors que taffiche cette requete ?
$sql = 'SELECT * FROM photos WHERE album=\''.$album.'\' ORDER BY id_album ASC';
echo $sql;

est ce conforme à ce que t attend ?
J'ai exactement le même problème, ça ne change rien.

@ stealth35
active ton mysql.trace_mode : ini_set('mysql.trace_mode', true);
et essaye un var_dump($resultat);
Je retrouve bien toutes mes données, dont L\'éléphant.

-----------------------

Par ailleurs, j'ai essayé de rajouter un addslashes à mon $album, ce qui donne désormais : L\\\'éléphant. Eh bien, c'est magique mais ça marche. Alors il faut que l'on m'explique là, parce que je n'y comprends plus rien... Voici donc le code qui passe :

Code : Tout sélectionner

$req_album = mysql_query("SELECT * FROM albums ORDER BY id_album ASC, id ASC") or die ("Erreur sql : ".mysql_error()); while ($resultat_album = mysql_fetch_array($req_album)) { $req = mysql_query("SELECT * FROM photos WHERE album='L\\\'éléphant' ORDER BY id_album ASC") or die ("Erreur sql : ".mysql_error()); $resultat = mysql_fetch_array($req); echo $resultat['album']; // Ça ne me retourne rien, même pas une erreur... }

Re: Problème mySQL avec apostrophe dans variable

par stealth35 » 02 déc. 2010, 01:49

active ton mysql.trace_mode : ini_set('mysql.trace_mode', true);
et essaye un var_dump($resultat);

Re: Problème mySQL avec apostrophe dans variable

par moogli » 02 déc. 2010, 01:43

que ce passe t il lors que taffiche cette requete ?
$sql = 'SELECT * FROM photos WHERE album=\''.$album.'\' ORDER BY id_album ASC';
echo $sql;

est ce conforme à ce que t attend ?

le \ peut être viré par les mécanisme de php !

@+

Re: Problème mySQL avec apostrophe dans variable

par devlop78 » 02 déc. 2010, 01:42

<< L'éléphant >> existe bien dans ta table ? Si oui, vérifie que ta reqête "SET NAMES" correspond bien à l'encodage utilisé sur ta page HTML. Pour éviter les problèmes, je te conseille d'utiliser le même encodage pour tout : tables, SET NAMES, php et html. Je ne peux que t'encourager à utiliser UTF-8.

Cordialement,

Re: Problème mySQL avec apostrophe dans variable

par opusincertum » 02 déc. 2010, 01:38

Comme je le disais dans mon message, mySQL ne retourne aucune erreur.

Re: Problème mySQL avec apostrophe dans variable

par devlop78 » 02 déc. 2010, 01:32

mySQL retourne une erreur ou non ??

Problème mySQL avec apostrophe dans variable

par opusincertum » 02 déc. 2010, 01:08

Bonjour à tous,

Je rencontre un problème lors d'une requête mySQL incluant une variable composée d'une apostrophe. Voici mon code (je le simplifie), on en reparle après...

Sachant que ça ne me retourne rien lorsque $album = "L\'éléphant" :

Code : Tout sélectionner

$req_album = mysql_query("SELECT * FROM albums ORDER BY id_album ASC, id ASC") or die ("Erreur sql : ".mysql_error()); while ($resultat_album = mysql_fetch_array($req_album)) { $req = mysql_query("SELECT * FROM photos WHERE album='$album' ORDER BY id_album ASC") or die ("Erreur sql : ".mysql_error()); $resultat = mysql_fetch_array($req); echo $resultat['album']; // Ça ne me retourne rien, même pas une erreur... }
Avez-vous une idée du problème sachant que ça devrait me retourner : L\'éléphant (oui, toutes mes variables ont un addslashes avant d'être intégrées à la base)

Tous les autres noms d'albums ne contenant pas d'apostrophe passent sans problème (Le lion, La tortue, etc...). Je suis en UTF-8.