bindParam导致致命错误

问题描述:

我有这样的SQL语句:bindParam导致致命错误

$sql = "SELECT c.creating_user FROM cdiscount_listing AS c WHERE c.created_at > :before_not_keyword AND c.created_at < :after_not_keyword"; 
    $query = $db->query($sql); 

    $query->bindParam(":before_not_keyword", $date." 23:59:59", PDO::PARAM_STR); 
    $query->bindParam(":after_not_keyword", $date." 00:00:00", PDO::PARAM_STR); 
    $query->execute(); 
    $listings = $query->fetchAll(); 

这给标准SQLSTATE[42000]: Syntax error or access violation错误。但是,当我将参数值硬编码到查询中时,错误消失了。 PDO本身有缺陷还是我错过了一些东西?

请注意,为了与遗留代码保持一致,正在创建日期。

日期格式:2015-07-01 00:00:00

+0

什么是'$ date'?如同在问题中增加的那样。 – Andrew

+4

用'$ db-> prepare'替换'$ db-> query' – Daan

+1

还必须通过引用来绑定参数 - 我非常确定'$ date。“00:00:00”'作为参数不是去上班。 – CD001

如果使用bindParam(),您必须通过参考传递第二个参数,但是你用字符串(不varaible),不能按引用传递。

因此,您可以使用bindValue()而不是bindParam()

谢谢!

bindParam()第二个参数应该是一个参考($变量),如果你想使用第二个参数值,你可以做,使用bindValues()

对于例如使用bindParam(): -

$before_date = $date." 23:59:59"; 
$after_date = $date." 00:00:00"; 
$query->bindParam(":before_not_keyword", $before_date, PDO::PARAM_STR); 
$query->bindParam(":after_not_keyword", $after_date, PDO::PARAM_STR); 

对于例如使用bindValues(): -

$query->bindValue(":before_not_keyword", $date." 23:59:59"); 
$query->bindValue(":after_not_keyword", $date." 00:00:00"); 

查找bindValue和bindParam之间的差异() from here