J'ai eu du mal avec un petit problème pendant un moment. Il y a été là depuis des années, mais c'est juste un problème irritant et non un sérieux, et je viens de travailler autour de lui. Mais maintenant, je veux savoir si quelqu'un peut m'aider. J'ai fait de Google'ing mais pas de succès.
Si je fais un message de formulaire d'un Textarea HTML dans un fichier PHP comme celui-ci: p> et bien sûr est un bouton de soumission et ainsi de suite. p> La valeur est le problème: Pour enregistrer ceci dans une mysql_database je fais ceci: p> et maintenant Je reçois l'erreur MySQL: P> Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de Server MySQL pour la bonne syntaxe à utiliser le site de Site approché '' à la ligne 1 p>
blockQuote> p> site de Google code> la valeur de la Textarea a à la fois "(marque de devis) et" (Apostrophe). p>
8 Réponses :
Échapper à la chaîne: D P>
http://php.net/manual/fr/ Fonction.MySQL-Real-Scaps-String.php P>
Au lieu d'utiliser les anciennes fonctions MySQL *, utilisez des requêtes paramétrées PDO et d'écriture - http://php.net/pdo < / a> p>
Toujours au moins au moins utilisez mysql_real_escape_string lorsque vous ajoutez des valeurs fournies par l'utilisateur dans la base de données. Vous devez rechercher des paramètres contraignants ou MySQLI afin que votre requête devienne: et? serait remplacé par la valeur réelle après avoir assainir l'entrée. p> Dans votre cas, utilisez: p> Lisez sur l'injection SQL. Cela vaut la peine de faire de la droite dès que possible! P> p>
Votre chaîne SQL sera la suivante:
INSERT INTO `table` (`row1`) VALUES ('google's site')
Le filtrage d'entrée n'a rien à voir avec SQL. Et s'échapper doit être fait pour toutes les données, pas seulement une entrée
Lol, pourquoi le bowvote? Nous parlons d'informations ici, c'est pourquoi j'ai écrit sur les commentaires.
C'est pourquoi il y a un ... À la fin, je l'ai écrit uniquement pour montrer que chacun peut exécuter n'importe quel SQL avec le code actuel. La question n'était pas "quand devrais-je échapper aux données?" Comme je le vois, mais ce qui ne va pas ... '
Merci pour cela, vous m'avez donné une tête avec la suppression de la table. L'exemple réel n'est pas si important pour moi. C'est là que je peux trouver des réponses futures! Merci!
Omg, stupide, buggy et réponse trompeuse étant acceptée. C'est la façon dont ce site stupide fonctionne.
@pinusnegra: Ne prenez aucune attention à Col. Shrapnel. Ses parents l'avaient l'habitude de le verrouiller dans le placard pendant des heures à la fin. Il suffit de le tapoter sur la tête et de dire: "Merci, colonel." Et puis fermez vivement.
Vous pouvez utiliser une fonction addSlashes (). Il cite une chaîne avec des barres obliques. Donc, il vous sera très utile lorsque vous ajoutez une apostrophe dans votre champ.
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".addslashes($_POST['text'])."') ") or die(mysql_error());
Je me disputez également des personnages lorsque je mettais à jour des données dans MySQL.
Mais je suis finalement arrivé à une meilleure réponse, voici: p> et quand vous Verformez-vous à mettre à jour votre base de données, le système ne sera pas mis à jour à moins que vous utilisiez la chaîne MySQL Real Escape.
Ici: P> Example: mysql_query("UPDATE client SET lastname = '$lastname' where clientID = '%"); //This will update your data and provide you with security.
Il suffit d'utiliser des déclarations préparées et vous n'auriez pas à vous soucier de l'échappement ou de l'injection SQL.
$con = <"Your database connection">;
$input = "What's up?";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
Si vous utilisez la version PHP> 5.5.0, vous devez utiliser comme celui-ci
$con = new mysqli("localhost", "your_user_name", "your_password", "your_db_name");
if ($con->query("INSERT into myCity (Name) VALUES ('".$con->real_escape_string($city)."')")) {
printf("%d Row inserted.\n", $con->affected_rows);
}
Vous DOOK i> Écéder à la chaîne correctement ou vous permettez SQL < Un href = "http://xkcd.com/327/" rel = "nOfollow noreferrer"> injection . À titre d'effet secondaire agréable, empêcher l'injection SQL résoudra votre problème.
Vous pouvez vous pouvez mysql_real_escape_string ()