Перемещение строки из одной таблицы в другую (вставка списка значений не соответствует списку столбцов)
Я использую построитель запросов Fluent для фреймворка Laravel PHP для перемещения строк из одной таблицы в другую. PDO используется. При использовании необработанного запросаDB::query()
Я получаю ошибку:
Error
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 (?, ?)
Query
// 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);
}
var_dump of $row
array(39) {
["id"]=>
string(7) "2511877"
["name"]=>
string(2) "AB"
["color"]=>
NULL
["type"]=>
NULL
...
Что является причиной ошибки и как ее можно исправить? Я попытался удалить элементы сNULL
с, но все равно получаю ту же ошибку!
Возможно, это проблема с массивом, передаваемым в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);
Error
SQLSTATE[21S01]: Insert value list does not match column list:
1136 Column count doesn't match value count at row 1