Я создаю класс, который содержит mysqli
ссылка на объект с частной функцией для генерации параметров, которые необходимы bind_params
функция, которая затем будет использоваться этой функцией:
call_user_func_array(array($stmt, 'bind_param'), $params);
Поскольку, bind_param
нужно передать значение по ссылке, поэтому я создаю функцию, как это:
// $values is taken from $_POST's values
private function ¶ms($values) {
// Generate first value for bind_params like: 'ssis'
$param_type = '';
foreach ($values as $value) {
$param_type .= gettype($value)[0];
}
// Generate the rest value for bind_params
$params[] = & $param_type;
for ($i = 0; $i < count($values); $i++) {
$params[] = & $values[$i];
}
// The returned values should be like { 'ssi', $str_value, $str_value, $int_value }
return $params;
}
Как я выполняю подготовленный оператор, выглядит так:
function insert_prepared($query, $posted) {
$params = &$this->params(array_values($posted));
$stmt = $this->mysqli->prepare($query);
if ($stmt) {
call_user_func_array(array($stmt, 'bind_param'), $params);
if ($stmt->execute()) {
return true;
} else {
return false;
}
}
}
Хорошо, теперь проблема в том, почему call_user_func_array(array($stmt, 'bind_param'), $params)
все еще жалобы на ожидается, будет ссылка?
Сделал руководство сказал, что функция должна быть написана как function ¶ms($values)
?
Что я пропустил?
Задача ещё не решена.
Других решений пока нет …