Страницы

Поиск по вопросам

четверг, 30 мая 2019 г.

PDO - исполнение запроса с избыточным массивом параметров

Tакой код работает
$info = array(); $info[':nik'] = trim($_POST['nik']); $info[':phone'] = trim($_POST['phone']); $info[':FIO'] = trim($_POST['FIO']); $info[':email'] = trim($_POST['email']);
$sql = "select count(*) from `punbb_users` where `email` = :email limit 1"; $count = $DB->getOne($sql, array(':email' => $info[':email']));
Но если заменить последнюю строку:
$count = $DB->getOne($sql, $info);
То уже ничего не работает.
Сама функция $DB->getOne() подготавливает и исполняет запрос через pdo
public function getOne($sql, $params = NULL) { if (is_null($params)) { return $this->pdo->query($sql)->fetchColumn(); } else { $stmt = $this->prepare($sql); $stmt->execute($params); return $stmt->fetchColumn(); } }
public function prepare($sql) { return $this->pdo->prepare($sql); }
Это происходит от того, что нельзя передавать массив с другими параметрами, когда нужен лишь один, или я что-то не так делаю?
Желательна еще и ссылка на документацию, если так делать нельзя.


Ответ

Да, количество параметров в запросе и в массиве, который передается методу prepare() должно совпадать, в противном случае, вам должна возвращаться следующая ошибка
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

Комментариев нет:

Отправить комментарий