Как использовать Reflection для вставки данных с помощью mysqli методом bind_param? В чем разница этих двух массивов?
Как bind_param($types, $var1, $var2, $var3,..)
метод mysqli_stmt
класс он получает только серию $variables
после второго параметра (я хочу передать массив), и номер $variables
неизвестно в моем случае, я хочу использовать отражение в моем insert($data)
функция. http://php.net/manual/ru/mysqli-stmt.bind-param.php
Я не показываю ненужную часть моей функции, чтобы избежать путаницы...
public function insert($data)
{
$types = 'sss';
$values = array_values($data);
Удален не связанный код
$ref = new ReflectionClass($this->stmt);
$method = $ref->getMethod("bind_param");
//array_unshift($values,$types); 1-option
$values = array($types,'alex','alex@code.com','cats'); 2-option
$method->invokeArgs($this->stmt, $values);
$done = $this->stmt->execute();
$this->stmt->close();
return $done;
}
Как показано в
$method = $ref->getMethod("bind_param");
$method->invokeArgs($this->stmt, $values);
В этой части я использую Reflection, чтобы передать массив второму параметру bind_param()
метод $this->$stmt
объект.
$method->invokeArgs($this->stmt, $values);
Это не делает mysqli вставкой в таблицу с 1-опцией.
Но mysqli вставляет данные, когда я использую 2 варианта. Зачем? Я должен использовать с 1-опцией, так как количество параметров неизвестно.
Как я могу извлечь выгоду из Reflection и MySQL это?
В чем разница между этими двумя вариантами (массивами)?
1 ответ
Вы можете использовать оператор сплат (версия PHP>= 5.6):
public function insert($data)
{
$stmt = $this->link->prepare($sql);
$stmt->bind_param(str_repeat('s', count($data), ...$data);
$stmt->execute();
}