我在
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();
这可能是不可取的,但它会立即声明变量.
希望这有用.