bindParam导致致命错误

时间:2015-07-02 08:38:58

标签: php pdo

我有这个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

2 个答案:

答案 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

之间的区别