2010-03-05 21 views
5

मुझे एसक्यूएल अच्छी तरह से पता है, लेकिन मुझे वास्तव में कुछ गूंगा याद आना चाहिए। यह अद्यतन क्वेरी एक त्रुटि फेंकती रहती है। क्वेरी है:यह SQL अद्यतन क्वेरी क्यों काम नहीं करती है?

UPDATE pages SET 'order' = 1 WHERE id = 19 

तालिका निश्चित रूप से आदेश के लिए एक स्तंभ है, और यह 19 वर्ष की आईडी क्रम स्तंभ अद्वितीय नहीं है के साथ एक रिकॉर्ड है।

त्रुटि मैं सामान्य से एक है:

#1064 - 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 '"order" = 2 WHERE id = 19' at line 1 

मैं उद्धरण चिह्नों में आदेश संलग्न कर दिया है क्योंकि ORDER एक आरक्षित एसक्यूएल शब्द है। मैं क्या खो रहा हूँ?

+1

यदि यह एक ऐसी तालिका है जो अभी तक उत्पादन में नहीं आई है, तो मेरा सुझाव है कि आप दायर नाम को उस चीज़ पर बदल दें जो बचने की आवश्यकता नहीं है। यह बहुत से रखरखाव का समय बचाएगा क्योंकि लोग इसे करना भूल जाएंगे और फिर आश्चर्य होगा कि क्या गलत है। भविष्य में, किसी फ़ील्ड नाम के लिए आरक्षित शब्द का उपयोग न करें। – HLGEM

उत्तर

7

में स्तंभ नाम विनिर्देश से एकल उद्धरण हटाने की जरूरत क्वेरी इस तरह दिखना चाहिए:

UPDATE `pages` SET `order`=1 WHERE `id`=19 
+0

केवल बैकटीक्स काम करते थे, लेकिन आपको केवल आरक्षित शब्द, ऑर्डर के आसपास उनकी आवश्यकता होती है। तो यह अद्यतन पृष्ठ सेट है 'ऑर्डर' = 1 जहां आईडी = 1 9 LIMIT 1. मुझे यकीन था कि स्क्वायर ब्रैकेट काम करेंगे, मुझे देखना होगा कि उन्होंने क्यों नहीं किया। – rhodesjason

+0

ध्यान दें कि आपको हर शब्द से बचने की ज़रूरत नहीं है (जैसा कि उदाहरण में दिखाया गया है)। केवल 'ऑर्डर'। – Timothy

+0

हां, आपको हर शब्द से बचने की ज़रूरत नहीं है। लेकिन तालिका और पंक्ति के नाम से बचने के लिए बेहतर समझने के लिए (और मुझे लगता है कि यह अच्छा अभ्यास है)। [संपादित करें] यहां आरक्षित शब्दों की एक सूची है foy mysql: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html – Tobias

3

यह एक MySQL त्रुटि संदेश की तरह दिखता है। MySQL बचने के लिए बैकटिक्स (`) का उपयोग नहीं करता है?

3
UPDATE pages SET [order] = 1 WHERE id = 19 

Nevemind MySQL

+0

यह त्रुटि संदेश में "MySQL" सही कहता है। :-) – Ken

+0

दिलचस्प बात यह है कि यह काम नहीं करता है। भले ही मैंने तुरंत यह स्वीकार किया कि आप क्या कह रहे थे और यह सुनिश्चित था कि यह था। – rhodesjason

1

उद्धरण चिह्नों का उपयोग नहीं करते हैं, का उपयोग करें [आदेश] (या जो भी अपने एसक्यूएल संस्करण से बचने के लिए उपयोग करता है)। नियमित उद्धरणों के साथ इसे एक स्ट्रिंग शाब्दिक के रूप में देखा जाता है, जिसे यहां अनुमति नहीं है।

0

आप अगर MySQL का उपयोग कर क्वेरी

UPDATE pages SET order = 1 WHERE id = 19 ; 
+1

यह काम नहीं करेगा। ऑर्डर एक आरक्षित शब्द है, और इसलिए इसे बचाना चाहिए (जो डेटाबेस-विशिष्ट है) – Timothy

0

order एक आरक्षित में प्रयोग किया जाता शब्द है ORDER BY

बैकटिक्स (`) का उपयोग करें (केन ने कहा)।

0

सबसे सरल जवाब है;

UPDATE pages SET pages.order = 1 WHERE id = 19 ; 

यह चाल चलाना चाहिए।

0

मुझे लगता है कि क्वेरी होना चाहिए;

UPDATE pages SET order = '1' 
WHERE id = 19 
संबंधित मुद्दे