Comment insérer une chaîne de caractères qui contient des virgules via une requête mysql?
J'ai un tableau avec 3 colonnes : id
, food_name
, et category
.
Par exemple, j'ai $food_name = "Amaranth grain, cooked"
(il y a une virgule), et category = "Cereals"
.
Je ne peux pas insérer les valeurs et le message d'erreur suivant:
Could not connect: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
VALUES ('Amaranth grain, cooked', )' at line 1
Ma requête SQL est :
$results1 = mysql_query("
INSERT INTO " . $table . " (food_en, category)
VALUES ('" . $food_name . "', '" . $category . "')"
)or die(mysql_error());
Ma conjecture est que la virgule dans "l'Amarante-grain, cuits" pose un problème, mais je ne peux pas le résoudre. J'ai essayé str_replace(',', '\,', $food_name)
et mysql_real_escape_string()
sans succès. J'ai probablement ne pas utiliser leur droit.
Merci d'avance.
EDIT: j'ai fait echo $catégorie, et il n'est pas null ni vide (la valeur est "Céréales").
Lorsque j'imprime au lieu d'utiliser mysql_query, j'obtiens:
INSERT INTO calories (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')
INSERT INTO carbohydrates (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')
INSERT INTO fats_and_fatty_acids (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')
INSERT INTO protein_and_amino_acids (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')
INSERT INTO vitamins (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')
INSERT INTO minerals (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')
INSERT INTO sterols (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')
INSERT INTO other (food_en, category)
VALUES ('Amaranth grain, cooked', 'Cereal Grains and Pasta')Could not connect: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
VALUES ('Amaranth grain, cooked', )' at line 1
(les différents tableaux sont simplement différentes tables de je veux de la ligne à insérer dans)
- Vous ne devriez pas utiliser
mysql_
fonctions à tous, mais, plutôt, PDO ou mysqli avec des requêtes paramétrées. - Je ne pense pas que votre code puisse être possible de générer une requête qui doit produire le message d'erreur que vous avez posté. Il n'y a pas
', '
dans le message d'erreur. L'ensemble de la deuxième champ est complètement absent. Êtes-vous sûr que vous avez publié sur le code vous sont effectivement en cours d'exécution? - remplacer
mysql_query
avecprint
et après ce qu'il crache. - Votre erreur ne correspond pas à votre code. Il devrait y avoir 2
'
dans votre message d'erreur en fonction de votre code:VALUES ('Amaranth grain, cooked', )'
devrait êtreVALUES ('Amaranth grain, cooked', '')'
- Où est le "impossible de se connecter" en venir? Êtes-vous sûr que vous êtes en train de regarder le bon endroit pour la cause de l'erreur? Est-il possible que le
INSERT INTO other
requête pourrait avoir exécuté correctement et que l'erreur a été causée par un autre requête dans une autre partie de votre code?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de problème dans vos requêtes à cause de la virgule.
Depuis que vous êtes à l'insertion d'enregistrements de tables différentes, vous devez séparer chaque requête avec un
query-separator
ouquery-delimiter
.Dans l'exemple de violon, j'ai séparé chaque requête avec un
semi-colon
et les requêtes get inséré sans problèmes.Reportez-vous Tripoter ici: http://sqlfiddle.com/#!2/ec94bc/1
Aussi longtemps que la chaîne est enveloppé dans des guillemets (comme vous l'avez ici entre guillemets simples), alors vous pouvez avoir des virgules dans votre chaîne. L'erreur a probablement à voir avec le fait que $catégorie semble être soit une chaîne vide ou null car il dit:
Assurez-vous que vous l'echo de la requête sql à assurez-vous que tout est exactement comme vous le souhaitez.
Vous pouvez utiliser la fonction php addslashes ou mysql_real_escape_string pour mettre les barres obliques, avant tous les caractères qui ont une signification dans mysql.