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
Комментариев нет:
Отправить комментарий