Имеется универсальный класс для импорта данных из разных источников. Собранные данные сохраняются в MySQL. Для работы с БД используются подготовленные запросы (Stmt), для удобства которые помещены в массив:
private $aStmt = array(
'checking' => array(
'stmt' => '',
'query' => 'SELECT `id` FROM `books` WHERE `bookId` = ?',
'paramsType' => 'i'),
'add' => array(
'stmt' => '',
'query' => 'INSERT INTO `books` (`source`, `bookId`, `author`) VALUES (?, ?, ?)',
'paramsType' => 'sis')
);
Раньше запросы подготавливались и параметры привязывались "вручную":
if(!$this->aStmt['checking']['stmt'] = $this->oDB->prepare($this->aStmt['checking']['query'])){
//error
}elseif(!$this->aStmt['checking']['stmt']->bind_param(aStmt['checking']['paramsType'], $this->info['id'])){
//error
}
Собственно, таких процедур было порядка трех, что не вызывало проблем.
Сейчас потребовалось добавить еще 3, 5, ... что привело к мысли о создании цикла подготовки запросов:
foreach($this->aStmt AS $name => $param){
if(!$this->aStmt[$name]['stmt'] = $this->oDB->prepare($this->aStmt[$name]['query'])){
//error
}elseif(!call_user_func_array(array($this->aStmt[$name]['stmt'],'bind_param')($this->aStmt[$name]['params'])){
//error
}
}
Предварительно поместив в $aStmt[$name]['params'] массив ссылок на переменные.
private $aStmt = array(
'checking' => array(
'stmt' => '',
'query' => 'SELECT `id` FROM `books` WHERE `bookId` = ?',
'params' => array('i', &$this->info['id'])),
'add' => array(
'stmt' => '',
'query' => 'INSERT INTO `books` (`source`, `bookId`, `author`) VALUES (?, ?, ?)',
'params' => array('sis', &$this->info['base'], &$this->info['id'], &$this->info['author']))
);
Но увы, при создании объекта данного класа, появляется ошибка:
PHP Parse error: syntax error, unexpected '&', expecting ')'
Версия PHP Version => 5.6.31
Прошу совета по реализации задумки, либо наставления на путь истинный при неправильном подходе к решению данного вопроса.