Перемещение строки из одной таблицы в другую (список значений вставки не соответствует списку столбцов)

Я использую Larvel PHP framework Fluent query builder для перемещения строк из одной таблицы в другую. 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); } 

var_dump строки $ row

 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 

Ну, количество столбцов не совпадает с количеством значений. Если вы не укажете, какие столбцы, по умолчанию для всех, вам нужно что-то вроде

 Insert IGNORE into table_2(Column1,Column2) Values (?, ?) 

Столбец1, столбец2, являющийся именами двух столбцов в таблице_2, вы хотите поместить значения из таблицы_1 в.

Имел ту же ошибку msg, но я использовал mysqli в php

  • в основном, как указано выше, если таблицы не идентичны по структуре, вы должны называть поля

Решенный некоторыми мастерами:

 $stmt = $con->prepare("INSERT INTO table2 (field1, field2, ..., ) SELECT field1, field2, ..., FROM table1 WHERE field = ? ");