Php 带绑定参数的PDO行为异常

Php 带绑定参数的PDO行为异常,php,pdo,Php,Pdo,我有一个简单的SQL查询,可以从绑定变量中获益,所以我写了这样的内容: $stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id=':user_id' AND date(start_time)=date(':on_specific_day')"); $stmt->bindParam(':user_id',$where['user_id']); $stmt->bindParam(':on_spec

我有一个简单的SQL查询,可以从绑定变量中获益,所以我写了这样的内容:

$stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id=':user_id' AND date(start_time)=date(':on_specific_day')");
$stmt->bindParam(':user_id',$where['user_id']); 
$stmt->bindParam(':on_specific_day',$where['on_specific_day']); 
如您所见,有一个名为
where
的关联数组,用于存储我的where条件。当我执行此语句时,它不会返回任何错误,但行计数为零。如果我放弃了使用绑定变量的梦想并这样做:

$stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id='{$where['user_id']}' AND date(start_time)=date('{$where['on_specific_day']}')");

查询运行正常,在我的测试用例中返回2个结果。有人能帮我避免陷入疯狂吗

您不需要在
PDO参数中加引号:

$stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id=:user_id AND date(start_time)=date(:on_specific_day)

您不需要用引号括起
PDO参数

$stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id=:user_id AND date(start_time)=date(:on_specific_day)

解释一下:准备好的查询中的参数是完整的变量,而不仅仅是要替换的文本。所以字符串变量不需要额外的引号,因为DB已经知道它是一个字符串。我喜欢一个简单的答案。工作得很有魅力。谢谢!解释一下:准备好的查询中的参数是完整的变量,而不仅仅是要替换的文本。所以字符串变量不需要额外的引号,因为DB已经知道它是一个字符串。我喜欢一个简单的答案。工作得很有魅力。谢谢!