Я пишу класс оболочки для MySQLi. Там я пишу функцию, чтобы принять запрос и переменное количество параметров, где я могу вызвать mysqli_stmt::bind_param
. Вот код:
<?php class DbHelper { .... public function Execute($query, $params){ $this->open(); # Opens a connection to the database using MySQLi API $stmt = $this->mysqli->prepare($query); try{ $result = call_user_func_array(array($stmt, 'bind_param'), $params); } catch(Exception $ex){ # Handle Exception } } .... } ?>
Вот как я вызываю функцию:
<?php $db = new DbHelper(); $params = array('i', $stateID); $result = $db->Execute('SELECT * FROM mst_cities WHERE State_ID = ?', $params); ?>
Когда я запускаю код, я получаю предупреждение:
Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in......
Что мне делать?
Из документов :
Примечание .
Следует соблюдать осторожность при использовании mysqli_stmt_bind_param () в сочетании с call_user_func_array (). Обратите внимание, что mysqli_stmt_bind_param () требует передачи параметров по ссылке, тогда как call_user_func_array () может принимать в качестве параметра список переменных, которые могут представлять ссылки или значения.
В комментариях есть некоторые обходные пути, например, см. Это :
call_user_func_array(array($stmt, 'bind_param'), refValues($params)); function refValues($arr) { if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+ { $refs = array(); foreach($arr as $key => $value) $refs[$key] = &$arr[$key]; return $refs; } return $arr; }