我有一个问题。 我有以下查询:
startDate|endDate
我试图绑定值,所以我做了:
$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";
时,有人可以向我解释为什么它不起作用?
答案 0 :(得分:1)
它不起作用,因为绑定时会引用一个字符串。 (或者,就所有意图和目的而言,工作就好像被引用一样,但是PDO可以在幕后处理它。)然后,您的查询被解释为:
select * from module,bloc where module.id_bloc = 'bloc.id_bloc'
即:它将被解释为文字字符串,而不是对表列的引用,并且显然不会给出预期的结果。没有必要先绑定它。
如果由于某种原因,您需要从不安全的源运行带有变量表/列名的查询,则必须手动格式化/清理它; see here以获取如何操作的示例。