Как использовать mysqli :: bind_param с массивом в качестве второго параметра - PullRequest
0 голосов
/ 02 июня 2018

Этот запрос должен вставить нового пользователя в таблицу 'users'

$user = DB::getInstance()->insert('users', array(
        'username' => 'jim',
        'password' => 'pass',
        'salt' => 'salt'
       )
);

Соответствующая вставка ()

public function insert($table, $fields = array())
{
    if (count($fields)) {
        $keys   = array_keys($fields);
        $values = null;
        $x      = 1;
        foreach ($fields as $field) {
            $values .= "?";
            if ($x < count($fields)) {
                $values .= ', ';
            }
            $x++;
        }
        $sql = "INSERT INTO users (`" . implode('`,`', $keys) . "`) VALUES ({$values})";
        echo $sql;
        if($this->queryDB($sql,$fields)){
            echo "its good";
            return true;
        }else{
            echo "bad query";
        }
    }
    return false;
}

Попытка связать запрос с массивом значений ($param) в качестве второго параметра функции bind_param

    $stmt = $this->mysqli->prepare($pattern);
    $stmt->bind_param("sss", $param);
    $stmt->execute();

Этот код постоянно возвращает ошибку «mysqli_stmt :: bind_param (): количество элементов в строке определения типа не соответствует числу переменных связывания».

Я также пробовал call_user_func_array, но продолжаю получать ту же ошибку.Что я делаю не так?

1 Ответ

0 голосов
/ 02 июня 2018

Начиная с PHP 5.6, вы можете использовать оператор splat ...

$stmt->bind_param("sss", ...$param);
...