AndreyK
Новичок
Проблема с передачей плэйсхолдера (переменная-массив) в DB-класс
Есть класс работы с базой данных, пример запроса $DB->query('INSERT INTO table SET ?a', $data);
где $data – массив с данными, которые нужно вставить, все чудесно.
Работаю с транзакциями, процесс хочется автоматизировать, готовою два массива: запросы и плэсходеры, потом выполняю запросы в цикле, если все выполнились – завершаю транзакцию. Проблемы появляются когда плэйсхолдером является массив. Ниже – пример.
Проблема в том, что после выполнения $query_list_placeholder[1] = "$distributor_data[1], $distributor_id"; в функцию query() передается “Array, 10000001”, массив теряется, т.к. произошло его преобразование в строку.
Как правильно передать группу плэйсхолдеров, если один из них - массив. Буду признателен за помощь.
Есть класс работы с базой данных, пример запроса $DB->query('INSERT INTO table SET ?a', $data);
где $data – массив с данными, которые нужно вставить, все чудесно.
Работаю с транзакциями, процесс хочется автоматизировать, готовою два массива: запросы и плэсходеры, потом выполняю запросы в цикле, если все выполнились – завершаю транзакцию. Проблемы появляются когда плэйсхолдером является массив. Ниже – пример.
PHP:
// данные для обновления
$data[0] = array('nickname' => "Billy1000", 'address_zip' => 'test1');
$data[1] = array('nickname' => "Billy999", 'address_zip' => 'test111');
$id = 10000001;
// Запросы
$query_list[0] = 'INSERT INTO table SET ?a';
$query_list[1] = 'UPDATE table SET ?a WHERE id=?';
// Список плэйсхолдеров для каждого запроса
$query_list_placeholder[0] = "data[0]";
$query_list_placeholder[1] = "$data[1], $id";
$DB->transaction();
$is_error = false;
for ($i=0; $i <=count($query_list); $i++) {
if ($DB->query($query_list[$i], $query_list_placeholder[$i]) === null) {
$is_error = true;
break;
}
}
if ($is_error) {
$DB->rollback();
} else {
$DB->commit();
}
Как правильно передать группу плэйсхолдеров, если один из них - массив. Буду признателен за помощь.