被这个人驱使疯狂......
我正在尝试使用单个db_query调用将多个行插入到D6数据库中。我已经将行收集为一组字符串,然后将它们收集到一个大字符串中,如下所示:
$theData = "(1, 2, 'a'), (3, 4, 'b'), (5, 6, 'c')";
db_query("insert into {table} (int1, int2, str) values %s", $theData);
($ theData没有像我的代码那样输入;它是我编写的代码的结果 - 一个包含在parens中包含的值集的大字符串。)
运行时,我收到如下错误:
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'insert into
table (int1, int2, str) values (1,2,\'a\' at line 1 query: insert into
table (int1, int2, str) values (1,2,\'a\'),(3,4,\'n\'),(5,6,\'c\')...
因此,在将值传递给mysql之前,db_query或其他人正在转义字符串。我如何防止这种情况发生?我可以对每组数据进行单独查询,但由于所有明显的原因,这是错误/昂贵的。谢谢!
答案 0 :(得分:1)
$theDatas = array("(1, 2, 'a')", "(3, 4, 'b')", "(5, 6, 'c')");
foreach($theDatas as $data) {
db_query("insert into {table} (int1, int2, str) values %s", $data);
}
但不建议这样做,而不是你应该:
$theDatas = array(array(1, 2, 'a'), array(3, 4, 'b'), array(5, 6, 'c'));
foreach($theDatas as $data) {
db_query("insert into {table} (int1, int2, str) values (%d, %d, '%s')", $data[0], $data[1], $data[2]);
}
或者您可以序列化($ theData)并将其作为“text”格式字段作为一个值,然后使用unserialize()来恢复数组 - 如果您只想存储数据(不搜索,索引等),建议采用这种方式。