Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Drupal 6 db插入:字符串被转义_Mysql_Drupal - Fatal编程技术网

Mysql Drupal 6 db插入:字符串被转义

Mysql Drupal 6 db插入:字符串被转义,mysql,drupal,Mysql,Drupal,被这个逼疯了 我正试图通过一个db_查询调用将许多行插入D6数据库。我将行收集为一组字符串,然后将它们收集为一个大字符串,如下所示: $theData = "(1, 2, 'a'), (3, 4, 'b'), (5, 6, 'c')"; db_query("insert into {table} (int1, int2, str) values %s", $theData); (在我的代码中,$theData不是那样键入的;它是我编写的代码的结果——一个大字符串,包含包装在paren中的值集

被这个逼疯了

我正试图通过一个db_查询调用将许多行插入D6数据库。我将行收集为一组字符串,然后将它们收集为一个大字符串,如下所示:

$theData = "(1, 2, 'a'), (3, 4, 'b'), (5, 6, 'c')";
db_query("insert into {table} (int1, int2, str) values %s", $theData); 
(在我的代码中,$theData不是那样键入的;它是我编写的代码的结果——一个大字符串,包含包装在paren中的值集。)

运行此操作时,会出现如下错误:

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\')...
因此,db_query或其他人在将的值传递给mysql之前正在转义字符串。我怎样才能避免这种情况发生?我可以对每一组数据进行单独的查询,但由于所有明显的原因,这是错误的/昂贵的。谢谢

$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()还原数组-如果您只想存储数据(无需搜索、索引等),建议使用这种方式。

新发现:我可以这样做--db_查询(“插入到{table}(int1、int2、str)值中”。$theData)--但感觉有点俗气。还有更好的吗?两种方法都是错误和不安全的,用Nikit建议的方法。Drupal 7支持在一个查询中插入多行,这就是我在尝试将所有工作压缩到一个db_查询调用中之前所处的位置。所以,在D6中真的没有办法做到这一点,除了我想出的破解方法?(@Berdir——关于D7这一点是正确的,但这个项目离我们要考虑的港口还很远。)