Question

Dites que je veux m'insérer dans le nom, l'adresse, la ville, l'état, les valeurs zipales $ nom, $ adresse etc. .....

Comment puis-je courir mysql_real_escape_string sur chacune des variables avant d'insérer. Il doit y avoir un foreach ou une boucle ou bien que la méthode au lieu d'écrire chaque variable n'est-ce pas?

Merci pour l'aide.

À M

Donc si j'ai

 $data = array($address, $city, $name);
 array_map('mysql_real_escape_string', $data);

et

$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");

Je reçois une tonne d'erreurs.

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23

Maintenant quoi?

Était-ce utile?

La solution

Une erreur de base de données s'est produite lorsque vous essayez d'invoquer mysql_real_escape_string Et je vois que tu utilises $dbh->exec() Pour exécuter la requête. Cela suggère que vous vous connectez à la base de données avec PDO, vous devriez donc plutôt utiliser PDO::quote à la place de mysql_real_escape_string.

De plus, comme d'autres l'ont déjà mentionné, une meilleure façon de résoudre votre problème serait d'utiliser des déclarations préparées et PDO::prepare.

Autres conseils

Vous utilisez sprintf.

Par exemple

$query = sprintf("INSERT into 
                  TABLE name = '%s', address = '%s', city = '%s'",
                 mysqli_escape_string($link, $name), 
                 mysqli_escape_string($link, $address), 
                 mysqli_escape_string($link, $city) );

Ou n'est-ce pas exactement ce que vous recherchiez; Un moyen d'éviter de taper "mysqli_escape_string" encore et encore.

Cela devrait fonctionner.

$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);

Mais vous ne devriez vraiment plus utiliser l'extension MySQL. Jettes un coup d'oeil à PDO ou mysqli et leur soutien aux "déclarations préparées".

Vous avez plusieurs problèmes.

Le premier est que vous devez attribuer la sortie de array_map() à une variable car elle ne fait pas de conversion sur place. Ensuite, vous devez l'imploser à une chaîne.

 $data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";

Le plus gros problème est que vous assemblez la main SQL au lieu d'utiliser une couche d'accès aux données qui prendrait les informations que vous souhaitez enregistrer et utiliser ses connaissances sur l'endroit où vous souhaitez le stocker pour assembler une déclaration SQL correcte, avec une citation appropriée et tout.

Il s'agit également de l'impulsion derrière les suggestions d'utilisation des instructions préparées, d'ailleurs, mais le simple fait d'utiliser des instructions préparées n'est que la moitié de la solution car vous assembleriez toujours les instructions SQL.

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