Я использую 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 = ? ");