Не выполняется запрос командой execute

98
24 апреля 2021, 08:10

Имеется такой код:

public function query($sql, $params = array())
{
    $stmt = $this->db->prepare($sql);
    if(!empty($params))
    {
        foreach($params as $key =>$val)
        {
            $stmt->bindValue(":", $key, $val);
        }
    }
    $stmt->execute();
    return $stmt;
}

при попытке его выполнить выходит сообщение "Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in "путь к файлу" on line 30" здесь указывается как раз на строчку $stmt->execute();. В результате выводится пустой массив. В чем ошибка?

Answer 1

Ошибка в том, что вы не передали параметры для запроса. Параметр - это первый аргумент bindValue, а не второй. То есть

$stmt->bindValue(":" . $key, $val);

Ну и цикл здесь не нужен вовсе, execute сам умеет принимать массив параметров.

public function query($sql, $params = array())
{
    $stmt = $this->db->prepare($sql);
    $stmt->execute($params);
    return $stmt;
}
READ ALSO
Автоматическая замена url на правильный

Автоматическая замена url на правильный

У меня например сейчас URL имеет такой вид 1-perwaja_nowosthtml и отображается новость с id 1, а если URL сделать 2-perwaja_nowost

81
Wordpress навигационное меню

Wordpress навигационное меню

столкнулся с такой проблемой, что у меня неправильно отображается мое менюСкорей всего из-за стилей

109
Вывести сумму прописью на Русском языке

Вывести сумму прописью на Русском языке

В товарной накладной необходимо добавить сумму прописьюПробую так:

93