引号内的MySql表名和字段名

时间:2010-03-05 07:18:30

标签: php mysql mysqli

我有一堆自动生成的PHP代码,它将所有表名和字段名都放在引号内。即:

INSERT INTO "t_ML_u_Visitor"("c_u_ID") VALUES ...

由于代码是自动生成的,所以如果我能以某种方式让MySql接受这种语法而不是将生成的代码放到后处理中来删除引号,那将是更受欢迎的。

我试过这个:

$conn=$mysqli = new mysqli("localhost", "root", "", "myDB");
$R=$conn->options(MYSQLI_INIT_COMMAND, "SET SQL_MODE = 'ANSI'"); 

但无济于事。

帮助?

2 个答案:

答案 0 :(得分:3)

正常引用字符是反引号 - 例如

create table `quoted`( `v` varchar(10) );

您可以更改自动生成的查询使用的引号字符吗?

编辑:我刚试过ANSI模式,它可以做你想要的:

set @session sql_mode = ANSI;
create table "world"( "v" varchar(10));

然后问题变成双引号不再用于引用文字字符串。

答案 1 :(得分:-1)

MySQL使用反引号(`)来逃避。 您的查询如下所示:

INSERT INTO `t_ML_u_Visitor` (`c_u_ID`) VALUES (...)

如果您正在使用PHP和Mysqli(如我所见),您可以使用mysqli的函数real_escape_string(),如下所示:

$conn = new mysqli("localhost", "root", "", "myDB");
$query = "INSERT INTO t_ML_u_Visitor (c_u_ID) VALUES (...)";
$escaped = $conn->real_escape_string($query);
$result = $conn->query($escaped);

另请参阅:http://de2.php.net/manual/en/mysqli.real-escape-string.php