Laravel PHP フレームワークの Fluent クエリ ビルダーを使用して、あるテーブルから別のテーブルに行を移動しています。PDOが使用されています。raw query を使用している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
...
エラーの原因と修正方法を教えてください。要素をNULL
s で削除しようとしましたが、それでも同じエラーが発生します!
アップデート
これは、 に渡される配列に問題がある可能性があり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