PHP PDO Неверный номер параметра: смешанные именованные и позиционные параметры - PullRequest
0 голосов
/ 27 февраля 2019

Я получаю следующее предупреждение при попытке выполнить следующий запрос.

Ошибка

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in E:\xampp\htdocs\msdca\attendance.php on line 142

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number in E:\xampp\htdocs\msdca\attendance.php on line 142

Запрос

$name = $_GET['name'];
$stmt = $pdo->prepare("SELECT `st_id`, `st_name` FROM `students` WHERE st_name LIKE ? or st_phone LIKE ? AND atd_year = :year");
$param = array("%$name%", "%$name%");
$stmt-> bindValue(':year', $_GET['yid']);
$stmt-> execute($param);

Что может быть причинойпроблема здесь?Любая помощь будет высоко оценен.Спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

Ваша проблема именно в том, что говорится в сообщении об ошибке, вы используете позиционные параметры (?) и именованные параметры (:year) в одном запросе, что недопустимо.Вы должны последовательно использовать один или другой, например,

$name = $_GET['name'];
$stmt = $pdo->prepare("SELECT `st_id`, `st_name` FROM `students` WHERE st_name LIKE ? or st_phone LIKE ? AND atd_year = ?");
$param = array("%$name%", "%$name%", $_GET['yid']);
$stmt-> execute($param);

или использовать именованные параметры:

$name = $_GET['name'];
$stmt = $pdo->prepare("SELECT `st_id`, `st_name` FROM `students` WHERE st_name LIKE :name or st_phone LIKE :phone AND atd_year = :year");
$param = array(':name' => "%$name%", ':phone' => "%$name%", ':year' => $_GET['yid']);
$stmt-> execute($param);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...