У меня есть следующий код кода в PHP7. Я использую PDO для подключения к MySQL.PDO эмулировать, привязывать одно значение несколько раз
С PDO подготовлена эмуляцией отчетности о, этот код работает успешно:
$query = $db_con->prepare('SELECT * FROM matches WHERE matches.home_team_id=:team_id OR matches.away_team_id=:team_id');
$query->bindValue(':team_id', $team_id, PDO::PARAM_STR);
$query->execute();
return $query->fetchAll();
Но с истинной PDO подготовленными заявлений (эмуляция выключена), предыдущий код выдает ошибку, что не было связанно достаточно значения. Я вынужден сделать следующее:
$query = $db_con->prepare('SELECT * FROM matches WHERE matches.home_team_id=:team_id OR matches.away_team_id=:team_id2');
$query->bindValue(':team_id', $team_id, PDO::PARAM_STR);
$query->bindValue(':team_id2', $team_id, PDO::PARAM_STR);
$query->execute();
return $query->fetchAll();
Это работает, но есть ли способ, которым я не должен объявить то же переменное дважды с истинными подготовленными заявлениями? У меня есть много этих запросов, и я хотел бы заменить их все, чтобы использовать истинные подготовленные заявления.
Как кто-то спросил в комментариях: почему я хочу, чтобы эмуляция выключена? У меня действительно не было предпочтения, но теперь кажется, что истинные подготовленные заявления более строгие, чем эмулируемые утверждения. Правильно ли я понимаю, что лучше развиваться с истинно подготовленными заявлениями, чтобы гарантировать, что он будет работать с обоими настройками?
Невозможно обойти это, о котором я знаю. Почему вы не хотите использовать эмуляцию? – bassxzero
У меня не было причины раньше, но теперь, когда мне представилась эта проблема, я: совместимость с обоими настройками. Как вы можете видеть из моего вопроса, изменение настройки нарушило мой код. Код для истинных подготовленных операторов работает с обоими настройками. – Max
Имя заполнитель должен быть уникальным. Помните, что для mysql все имена становятся «?» как заполнители. то есть ': team_id1' и': team_id2'. Как бы то ни было, это не сработает, если вы используете одно и то же имя заполнителя. Режим эмуляции отличается, поскольку PDO строит запрос inline с цитированными строками. ; -/ –