PHP,MySQL数据库.table`,引用目前,我不明白

时间:2011-05-09 16:45:04

标签: php mysql

我正在开发一个使用数组中定义的mysql表的应用程序。这样可以快速更改它们以便在开发/实时环境中使用。

除了关于为什么开发环境使用完全不同的表结构的问题,我得到的是我希望这是一个简单的问题。

我有一个表的定义与其他表不同,如下:

'customer' => Array(
  'variables' => 'customer.`variables`'
)

虽然所有其他表都是这样定义的:

'customer' => Array(
  'orders' => 'customer.orders'
)

区别在于围绕表名的那对。显然这不是一个有效的表(我在数据库中找不到简单命名为'变量'的表。快速的想法如何跟踪这个?我在这一点上假设它具有特殊含义MySQL服务器,但这只是猜测。

注意:在同一个数组中定义了许多其他表,我只是将它们排除在外。其他每个定义都与第二个例子类似。

1 个答案:

答案 0 :(得分:7)

  

可以引用标识符或   不带引号的。如果标识符包含   特殊字符或是保留的   一句话,你必须随时引用它   参考它。一组字母数字   当前角色的字符   设置,“_”和“$”并不特别。   保留字列在Section   8.3,“保留字”。 (例外:在一段时间后的保留字   合格的名称必须是   标识符,所以不需要引用。)

     

标识符引号字符是   反引号(“`”):

来自http://dev.mysql.com/doc/refman/5.1/en/identifiers.html

更新:在此上下文中,似乎variables实际需要转义。但是,自动化工具(包括MySQL本身)往往会逃脱它;可能,因为转义算法不是上下文敏感的,它只是在列表中找到单词:

mysql> set sql_quote_show_create=off;
Query OK, 0 rows affected (0.00 sec)
mysql> show create table my_test;
[...]
CREATE TABLE my_test (
  id int(11) DEFAULT NULL,
  `variables` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1