Имеется такой код:
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();. В результате выводится пустой массив. В чем ошибка?
Ошибка в том, что вы не передали параметры для запроса. Параметр - это первый аргумент bindValue, а не второй. То есть
$stmt->bindValue(":" . $key, $val);
Ну и цикл здесь не нужен вовсе, execute сам умеет принимать массив параметров.
public function query($sql, $params = array())
{
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt;
}
Продвижение своими сайтами как стратегия роста и независимости