2013-04-08 2 views
0

Je ne peux tout simplement pas comprendre ce problème. J'écris un script PHP simple pour mettre à jour un champ de base de données spécifique.Erreur de syntaxe MYSQL sur UPDATE avec le mot 'clé'

Cette requête fonctionne très bien, aucun problème, mais setting_id est susceptible de changer semble et donc ne convient pas/portable

mysql_query("UPDATE oc_setting SET value='" . $css . "'" . 'WHERE setting_id=13576', $con) or die(mysql_error()); 

Cette requête, ne semble pas fonctionner en aucun cas, ce qui est la requête dont j'ai besoin.

mysql_query("UPDATE oc_setting SET value='" . $css . "'" . 'WHERE key="sellya_custom_css"', $con) or die(mysql_error()); 

Il me laisse cette erreur: Vous avez une erreur dans votre syntaxe SQL; vérifier le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'key = "sellya_custom_css"' à la ligne 1

Maintenant j'ai eu une intuition qu'il peut avoir quelque chose avec le mot clé étant peut-être un mot-clé réservé ou Quelque chose donc j'ai essayé de l'envelopper entre guillemets, et bien que le script n'ait pas trouvé d'erreurs, il n'a pas non plus mis à jour le champ.

J'ai essayé d'innombrables combinaisons de guillemets simples, de combinaisons de concaténation de différentes sortes en vain.

Quelqu'un pourrait-il m'aider s'il vous plaît?

Merci.

+2

'key' est un mot réservé et devrait avoir les tiques en arrière si vous voulez toujours utiliser –

+1

Pourquoi ai-je reçu un vote vers le bas: S? – Melbourne2991

+0

theres aucun mal avec cette question. –

Répondre

5

KEY est un mot de réserve dans une base MySQL

mieux mettre KEY l'intérieur `` tiques dos.

Source (link)

+0

parfait merci! Je pensais que c'était peut-être le cas, mais je ne savais pas que je devais utiliser des guillemets spéciaux ('') pour l'envelopper. – Melbourne2991

+0

@ user1650757 oui il est parfaitement bon de s'entraîner à l'avoir ..: D –

+1

vous devriez référencer la clé de partitionnement mais à la place la liste des mots-clés réservés dans mysql. [Liste de mots-clés réservés MySQL] (http://dev.mysql.com/doc/refman/5.5/fr/reserved-words.html) –

2

Please, don't use mysql_* functions in new code. They are no longer maintained and are officially deprecated . See the red box? Learn about prepared statements instead, and use or .

Maintenant, à la question:

"UPDATE oc_setting SET value='" . $css . "'" . 'WHERE key="sellya_custom_css"' 

dans cette chaîne de requête, il vous manque un espace avant WHERE. Changer à:

"UPDATE oc_setting SET value='" . $css . "'" . ' WHERE `key`="sellya_custom_css"' 

key besoins à échapper dans la requête aussi.

+0

Ok, prenez le temps de regarder dans pdo et mysqli, après avoir ajouté l'espace, je reçois toujours la même erreur. – Melbourne2991