Проблема с передачей плэйсхолдера (переменная-массив) в DB-класс

AndreyK

Новичок
Проблема с передачей плэйсхолдера (переменная-массив) в DB-класс

Есть класс работы с базой данных, пример запроса $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();	
}
Проблема в том, что после выполнения $query_list_placeholder[1] = "$distributor_data[1], $distributor_id"; в функцию query() передается “Array, 10000001”, массив теряется, т.к. произошло его преобразование в строку.

Как правильно передать группу плэйсхолдеров, если один из них - массив. Буду признателен за помощь.
 

AndreyK

Новичок
$query_list_placeholder[1] = "$data[1], $id"; - чо за бред?
А как правильно передать список плэйсхолдеров, если кол-во разное в каждом запросе, а запросы хочется выполнить в цикле.
 

tf

крылья рулят
cDLEON, проснись
AndreyK, определение $DB->query( посмотри
и call_user_func посмотри в мане
 

AndreyK

Новичок
cDLEON,
используя implode, я "теряю" ключи массива, в которых у меня записаны имена полей.

tf,
о call_user_func в курсе, но как она мне может помочь?
 

AndreyK

Новичок
DB-класс принимает различные типы плэсхолдеров: числовой, строковый, массив, ...

PHP:
    function query()
    {
        $args = func_get_args();
        $total = false;
        return $this->_query($args, $total);
    }

PHP:
    function _query($query, &$total)
    {
        $this->_resetLastError();
        
        // Fetch query attributes.
        $this->attributes = $this->_transformQuery($query, 'GET_ATTRIBUTES');
        ......
        ......
 
Сверху