11
votes

Mysql + php avec des caractères spéciaux tels que '(Apostrophe) et "(citation)

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: xxx

et bien sûr est un bouton de soumission et ainsi de suite.

La valeur est le problème: site de Google la valeur de la Textarea a à la fois "(marque de devis) et" (Apostrophe).

Pour enregistrer ceci dans une mysql_database je fais ceci: xxx

et maintenant Je reçois l'erreur MySQL:

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


2 commentaires

Vous DOOK É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 ()


8 Réponses :


3
votes

1
votes

Au lieu d'utiliser les anciennes fonctions MySQL *, utilisez des requêtes paramétrées PDO et d'écriture - http://php.net/pdo < / a>


0 commentaires

9
votes

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: xxx

et? serait remplacé par la valeur réelle après avoir assainir l'entrée.

Dans votre cas, utilisez: xxx

Lisez sur l'injection SQL. Cela vaut la peine de faire de la droite dès que possible!


0 commentaires

21
votes

Votre chaîne SQL sera la suivante:

INSERT INTO `table` (`row1`) VALUES ('google's site')


6 commentaires

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.



2
votes

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());


0 commentaires

0
votes

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> xxx pré>

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.


0 commentaires

0
votes

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();


0 commentaires

0
votes

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);
}


0 commentaires