PHP: $subCats = $curObj['subCats']; foreach ( $subCats as $subCatId => $on) { $admin->db->sql ( "INSERT INTO _@object_insubcats (objectId,subCatId) VALUES ($curObjId,$subCatId)" ); } Вот что выдает print_r(SubCats) Array ( [1046] => ON [1052] => ON [939] => ON [940] => ON [946] => ON [1256] => ON [1487] => ON ) А вот сама ошибка... Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\OSPanel\domains\localhost\gigal\system\db.class.php on line 41 Array ( [error] => [sql] => INSERT INTO id_object_insubcats (objectId,subCatId) VALUES (6971,1046) ) Что делать? Заранее спасибо
соединение в базе идет через функцию sql() --- Добавлено --- Да и забыл сказать что информация заносится через поле checkbox поэтому больше чем 1.
Теперь он бьет следующую ошибку: [error] => Duplicate entry '6955-467' for key 'PRIMARY' [sql] => INSERT INTO `id_object_insubcats` ( `objectId`, `subCatId` ) VALUES ( '6955', '467' ) Посмотрел в базе там нет дубляжа запись уникальна.
Проблема не в foreach, а в запросе, об этом тебе и пишет. Может, ковычки стоит добавить. Выше дали(намекнули) хороший совет, не обязательно пихать в foreach 55 инцертов, можно обойтись одним.
Да рад конечно и одним ограничится но поле чекбокс и нужно за 1 запрос несколько данных в базу отправить.
@bogdan_titomir, форыч тут не при чем. Просто вы не можете собрать корректный запрос. --- Добавлено --- @bogdan_titomir, йоу. Ты даже не понимаешь о чем тебе говорят. Запрос с помощью цикла собирается на стороне php и только потом отправляется в бд. А не один запрос на итерацию. Ну а по поводу ошибки чёрным по белому написано в самой ошибке. И делай echo запроса перед тем как отправить его в бд. Это сэкономит кучу времени и нервов.
Запрос может иметь вид, типа Код (Text): INSERT INTO `table` VALUES (1,23),(2,34),(4,33); Оптимизация на лицо, чем 10 инцертов делать. Собери инфо в массиве и делов. Примеров куча в интернете.
только нужно явно указывать названия полей в которые записываешь, при записи сразу нескольких строк. Код (Text): INSERT INTO `table` (field1, field2) VALUES (1,23),(2,34),(4,33); В итоге можно сделать так: Код (PHP): $subCats = $curObj['subCats']; $sql = array(); foreach ( $subCats as $subCatId => $on) { $sql[] = "($curObjId, $subCatId)"; } $admin->db->sql ( "INSERT INTO _@object_insubcats (objectId,subCatId) VALUES ".implode("," , $sql) );