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
答
如果使用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
什么是'$ date'?如同在问题中增加的那样。 – Andrew
用'$ db-> prepare'替换'$ db-> query' – Daan
还必须通过引用来绑定参数 - 我非常确定'$ date。“00:00:00”'作为参数不是去上班。 – CD001