Drupal 6 db insert:字符串正在逃脱

时间:2011-03-23 22:25:34

标签: mysql drupal

被这个人驱使疯狂......

我正在尝试使用单个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或其他人正在转义字符串。我如何防止这种情况发生?我可以对每组数据进行单独查询,但由于所有明显的原因,这是错误/昂贵的。谢谢!

1 个答案:

答案 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()来恢复数组 - 如果您只想存储数据(不搜索,索引等),建议采用这种方式。