我有这个sql语句:
$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 :(得分:0)
如果您使用bindParam()
,则必须通过引用传递第二个参数,但是您使用的字符串(不是可变的)不能通过引用传递。
因此,您可以使用bindValue()
代替bindParam()
。
谢谢!
答案 1 :(得分:0)
在bindParam()
中,第二个参数应该是引用($ variable),如果要使用第二个参数作为值,可以使用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
之间的区别