Как использовать 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();
}
Другие вопросы по тегам