Question

Mon serveur est en cours d'exécution PHP 5.2.17 et j'ai des citations magiques avec un handicap fichier php.ini. J'ai un tableau de chaînes certains sont comme

abcd "efg" hij'k lmnop'q

Je fuyais les pour l'insertion dans une base de données MySQL en utilisant le code suivant

foreach($array as &$data) {
    mysql_real_escape_string($data);
}

Je construis alors mon sql comme si

$sql='INSERT INTO table VALUES('.
     '"'.$array[0].'", '.
     '"'.$array[1].'", '.
     '"'.$array[2].'")';

Je reçois une erreur lorsque je tente d'exécuter ma requête. sortie I la variable $ sql quand je reçois une erreur et il semble que mysql_real_escape_string ne se soit entre guillemets simples échappe ou des guillemets doubles.

Si ma variable $ est créé en utilisant des guillemets simples avec les valeurs de la colonne entre guillemets comme il est ci-dessus guillemets simples sont échappés, mais les guillemets doubles ne sont pas.

Si je passe les guillemets pour que la variable $ sql est créé en utilisant des guillemets doubles et les valeurs de la colonne sont entre guillemets simples que les guillemets sont échappés.

Quelqu'un peut-il figure ce qui pourrait aller mal?

Mise à jour **

Matchu compris. J'ai changé mon code pour ce qui suit et il fonctionne:

foreach($row as &$data) {
    $data = mysql_real_escape_string($data);
}
Était-ce utile?

La solution

mysql_real_escape_string ne pas modifier l'objet chaîne elle-même, même si vous utilisez & passer par référence plutôt que par valeur. Au lieu de cela, il retourne une copie échappé de la chaîne. Vous ne pouvez pas exécuter simplement la fonction; vous devez assigner sa sortie à une variable.

Je ne suis pas dans un endroit où je peux tester en ce moment, mais Joe dit que cela fait l'affaire:

$data = mysql_real_escape_string($data);

Autres conseils

Une meilleure solution est d'utiliser AOP préparé des déclarations à la place:

$stmt = $dbh->prepare("INSERT INTO table VALUES(?, ?, ?)"); 
$stmt->execute($array); 

Non les appels répétés à mysql_real_escape_string(), pas itérer et (OMI) code plus propre.

Matchu est correct, mysql_real_escape_string renvoie la chaîne échappée. Essayez ...

foreach($array as &$data) {
   $data = mysql_real_escape_string( $data );
}

Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top