Php 带绑定参数的PDO行为异常
我有一个简单的SQL查询,可以从绑定变量中获益,所以我写了这样的内容: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
$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已经知道它是一个字符串。我喜欢一个简单的答案。工作得很有魅力。谢谢!