【发布时间】:2012-09-19 10:10:14
【问题描述】:
我正在使用 Laravel PHP 框架的 Fluent 查询构建器将行从一个表移动到另一个表。正在使用 PDO。在使用原始查询 DB::query() 时,我收到错误:
错误
SQLSTATE[21S01]: Insert value list does not match column list:
1136 Column count doesn't match value count at row 1
SQL: INSERT IGNORE into listings_archive VALUES (?, ?)
查询
// Get rows from first table
$rows = DB::table('table_1')
->where('id', '>', '12345')
->get();
// Copy rows to second table
foreach($rows as $row) {
$listing = get_object_vars($row);
DB::query('INSERT IGNORE into table_2 VALUES (?, ?)', $row);
}
$row 的var_dump
array(39) {
["id"]=>
string(7) "2511877"
["name"]=>
string(2) "AB"
["color"]=>
NULL
["type"]=>
NULL
...
是什么导致了错误,如何解决?我尝试使用NULLs 删除元素,但仍然出现相同的错误!
更新
这可能是数组被传递到DB::query() 时出现的问题。这些非常简单的例子给出了类似的错误:
$row = array('id', 123);
DB::query('INSERT IGNORE into table_2 VALUES (?, ?)', $row);
和
$row = array('id' => 123);
DB::query('INSERT IGNORE into table_2 VALUES (?, ?)', $row);
错误
SQLSTATE[21S01]: Insert value list does not match column list:
1136 Column count doesn't match value count at row 1
【问题讨论】: