2012-04-19 90 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

在附注上,小心你不会因[SQL注入攻击](http://en.wikipedia.org/wiki/SQL_injection#Incorrectly_filtered_escape_characters)而变得容易受到攻击。 – Jeroen 2012-04-19 13:41:52

+0

对于您的问题,您可能需要引用列名称,答案可能在[此MySQL文档](http://dev.mysql.com/doc/refman/5.5/en/identifiers.html)中找到,乍一看,我会说MySQL需要在包含句点字符的列名周围使用反引号(如果允许使用ANSI变体,则需要双引号)。 – Jeroen 2012-04-19 13:45:06

回答

7

不使用单引号作为列名,而是使用反引号(在大多数键盘上,在1键的左侧)。

像这样:

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

它的工作原理,谢谢。 – mrinterested 2012-04-19 13:43:04

14

因为这也是database.table.column的语法。你必须引用它们像

`nameUser.name` 

虽然真的,如果你创建/设计的数据库你不应该使用这样的列名称。这只是一个可怕的想法。

+0

感谢您的建议,但我不是程序员。但是,将来会记住这一点! – mrinterested 2012-04-19 13:44:22

相关问题