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

Jef*_*eff 1 php mysql

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

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

我有一个表定义不同于其他表,如下所示:

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

所有其他表都以这种方式定义:

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

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

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

Álv*_*lez 7

可以引用或不引用标识符.如果标识符包含特殊字符或是保留字,则必须在引用时引用它.当前字符集"_"和"$"中的字母数字字符集不是特殊字符.保留字列在第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
Run Code Online (Sandbox Code Playgroud)