我有一堆自动生成的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'");
但无济于事。
帮助?
答案 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