我有一个问题。我有以下查询:
$query = "select * from module,bloc where module.id_bloc = ?";
我试图绑定值,所以我做到了:
$stmt = $this->db->prepare($query);
$stmt->bindValue(1, "bloc.id_bloc");
但是,当我测试时,我不会在浏览器上得到任何结果。这很奇怪,因为当我像以下代码那样直接替换内部时:
$query = "select * from module,bloc where module.id_bloc = bloc.id_bloc";
我在浏览器上得到正确的结果。
有人可以向我解释为什么当我进行bindValue
时它不起作用?
它将不起作用,因为当绑定时,将引用一个字符串。(或者,出于所有意图和目的,就好像被引用一样工作,但是PDO可能会在幕后处理。)然后,您的查询被解释为:
select * from module,bloc where module.id_bloc = 'bloc.id_bloc'
也就是说:它将被解释为文字字符串,而不是对表列的引用,显然不会给您预期的结果。不需要将其束缚起来。
如果出于某种原因,您需要从不安全的源运行带有变量表/列名的查询,则必须手动格式化/对其进行手动格式化/消毒;有关如何做的示例,请参见此处。