2012-04-19 55 views
7

Tôi có các cột tên của chúng có cấu trúc nameUser.Name, nhưng tôi đang gặp sự cố khi cập nhật chúng. Tôi đã thử một vài khả năng:Cập nhật cột MySQL có chứa dấu chấm (.) Trong tên

// 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'"); 

Tuy nhiên, không có công trình nào ở trên. Tại sao?

+0

Trên một lưu ý phụ, hãy cẩn thận bạn không kết thúc bằng việc tấn công [tấn công SQL injection] (http://en.wikipedia.org/wiki/SQL_injection#Incorrectly_filtered_escape_characters). – Jeroen

+0

Đối với vấn đề của bạn, bạn có thể cần phải trích dẫn tên cột, câu trả lời có thể được tìm thấy tại [tài liệu MySQL này] (http://dev.mysql.com/doc/refman/5.5/en/identifiers.html), ở cái nhìn đầu tiên tôi muốn nói MySQL yêu cầu backticks (hoặc dấu ngoặc kép nếu biến thể ANSI được cho phép) xung quanh tên cột với các ký tự thời gian trong chúng. – Jeroen

Trả lời

7

Thay vì sử dụng dấu nháy đơn cho tên cột, hãy sử dụng dấu gạch chéo ngược (trên hầu hết bàn phím, ở bên trái của phím 1).

Như thế này:

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

Nó hoạt động, cảm ơn bạn. – mrinterested

14

Bởi vì đó cũng là cú pháp cho database.table.column. Bạn sẽ phải báo giá chúng như

`nameUser.name` 

Mặc dù thực sự, nếu bạn tạo/thiết kế db bạn không bao giờ nên sử dụng tên cột như thế. Nó chỉ là một ý tưởng khủng khiếp.

+0

cảm ơn đề xuất này, nhưng tôi không phải là lập trình viên. Tuy nhiên, sẽ nhớ điều này cho tương lai! – mrinterested

Các vấn đề liên quan