php – PDO模拟关闭,多次绑定相同的值

我在
PHP7中有以下代码.我正在使用PDO连接到MySQL.

通过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();

这是有效的,但有没有办法我不必用真正的预处理语句两次声明相同的变量?我有很多这些查询,并希望将它们全部替换为使用真正准备好的语句.

正如有人在评论中提到的那样:为什么我要关闭模拟?我没有真正的偏好,但现在似乎真正准备好的语句比模拟语句更严格.我的理解是否正确,最好用真实的准备语句开发,以保证它可以在两种设置下工作?

最佳答案 有一种方法可以改变查询

$query=$db_con->prepare('SELECT*FROM matches WHERE :team_id in(home_team_id,away_team_id)');
$query->bindValue(':team_id', $team_id, PDO::PARAM_STR);
$query->execute();

这可能是不可取的,但它会立即声明变量.

希望这有用.

点赞