2012-04-19 6 views
7

मैं कॉलम कि उनके नाम संरचना nameUser.Name है है, लेकिन मैं मुसीबत उन्हें अद्यतन करने आ रही है। मैंने कुछ संभावनाओं की कोशिश की है:एक MySQL स्तंभ है कि इसके नाम पर बिंदु (।) शामिल हैं अद्यतन कर रहा है

// Ideally, I'd like to do this (since the User.Name is 'dynamic', ie, it depends 
// on who is logged in): 
$userLogged = 'Some.User'; 
$columnName = 'name' . $userLogged; 
mysql_query("UPDATE Industries SET '$columnName'='$name' WHERE id='$id'"); 
// Another try: 
mysql_query("UPDATE Industries SET $columnName='$name' WHERE id='$id'"); 
// Alternatively, if the above cannot be achieved: 
mysql_query("UPDATE Industries SET 'nameSome.User'='$name' WHERE id='$id'"); 
// Yet another try: 
mysql_query("UPDATE Industries SET nameSome.User='$name' WHERE id='$id'"); 

उपरोक्त कार्यों में से कोई भी नहीं। क्यूं कर?

+0

एक तरफ ध्यान दें, सावधान रहें कि आप [एसक्यूएल इंजेक्ट हमलों] (http://en.wikipedia.org/wiki/SQL_injection#Incorrectly_filtered_escape_characters) के लिए vulnarable समाप्त नहीं कर रहे हैं। – Jeroen

+0

आपकी समस्या के लिए, आपको शायद कॉलम नाम उद्धृत करने की आवश्यकता है, उत्तर शायद [इस MySQL दस्तावेज़] (http://dev.mysql.com/doc/refman/5.5/en/identifiers.html) पर पाया जा सकता है, पहली नज़र में मैं कहूंगा कि MySQL में बैकटिक्स की आवश्यकता होती है (या डबल कोट्स यदि एएनएसआई संस्करण की अनुमति है) कॉलम नामों के आसपास उनमें वर्ण वर्णों के साथ। – Jeroen

उत्तर

7
इसके बजाय स्तंभ नाम के लिए एकल उद्धरण का उपयोग करने का

, (, सबसे कीबोर्ड पर 1 कुंजी के बाईं ओर) बैकटिक का उपयोग करें।

इस तरह

:

mysql_query("UPDATE Industries SET `nameSome.User`='$name' WHERE id='$id'"); 
+0

यह काम करता है, धन्यवाद। – mrinterested

14

क्योंकि वह भी database.table.column के लिए वाक्य रचना है। आप वास्तव में, यदि आप बनाया/db आप ऐसा स्तंभ नाम का उपयोग कभी नहीं करना चाहिए डिजाइन किया हालांकि तरह

`nameUser.name` 

उन्हें उद्धृत करने के लिए किया है। यह सिर्फ एक भयानक विचार है।

+0

सुझाव के लिए धन्यवाद, लेकिन मैं एक प्रोग्रामर नहीं हूं। हालांकि, भविष्य के लिए यह याद रखेगा! – mrinterested

संबंधित मुद्दे