2015-07-02 271 views
0

我有這樣的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

回答

0

如果使用bindParam(),您必須通過參考傳遞第二個參數,但是你用字符串(不varaible),不能按引用傳遞。

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

謝謝!

0

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