PHP PDO mysql编写了statment和join

时间:2016-12-26 13:42:45

标签: php mysql pdo

我有一个问题。 我有以下查询:

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"; 时,有人可以向我解释为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

它不起作用,因为绑定时会引用一个字符串。 (或者,就所有意图和目的而言,工作就好像被引用一样,但是PDO可以在幕后处理它。)然后,您的查询被解释为:

select * from module,bloc where module.id_bloc = 'bloc.id_bloc'

即:它将被解释为文字字符串,而不是对表列的引用,并且显然不会给出预期的结果。没有必要先绑定它。

如果由于某种原因,您需要从不安全的源运行带有变量表/列名的查询,则必须手动格式化/清理它; see here以获取如何操作的示例。