2013-10-04 84 views
0

我有這樣一個查詢:PDO綁定參數不起作用

$stmt = $db->query(' 
    SELECT e.id 
    FROM `entity` e 
    WHERE e.deleted = 0 AND e.published = 1 AND e.date <= CURDATE() ' . 
      (!empty($_SESSION['filter']) ? ' AND e.category = :category' : '') 
); 

if (!empty($_SESSION['filter'])) { 
    $stmt->bindValue('category', $_SESSION['filter'], PDO::PARAM_INT); 
} 

$entities = $stmt->fetchAll(PDO::FETCH_ASSOC); 

我在catgeory 1$_SESSION['filter']一些條目設置:

string(1) "1" 

但它不加載任何條目也不會出現任何錯誤。

我嘗試過:

  • 重命名category別的東西,像myvalue
  • 建立一個新的變量:$x = 1; $stmt->bindValue('category', $x, PDO::PARAM_INT);
  • 直接編輯查詢:' AND e.category = 1'' AND e.category = $_SESSION['filter']'

出於所有可能性只有最後一個工作。這也是我實際上不想使用的那個。我怎樣才能解決這個問題?

+1

你必須執行'()'語句,您可以'使用fetchall()' –

回答

3

PDO::query() executes an SQL statement in a single function call, returning the result set (if any) returned by the statement as a PDOStatement object.

您的查詢已經執行。綁定值不起作用。

您應該先準備好您的查詢。

$stmt = $db->prepare(' 
    SELECT e.id 
    FROM `entity` e 
    WHERE e.deleted = 0 AND e.published = 1 AND e.date <= CURDATE() ' . 
     (!empty($_SESSION['filter']) ? ' AND e.category = :category' : '') 
); 
+0

啊,當然。我想我應該在整天編碼後休息一下。我絕對沒有'執行'它。謝謝。接得好。 – lampshade

1

你錯過了在這一行冒號:

$stmt->bindValue('category', $_SESSION['filter'], PDO::PARAM_INT); 

應該是:

$stmt->bindValue(':category', $_SESSION['filter'], PDO::PARAM_INT); 

編輯:我錯過了最明顯的問題。請參閱u_mulder的答案。

+0

其實它的工作原理之前,左右逢源,但感謝這個提示了。 – lampshade

+0

哦,我沒有意識到。然後我也學到了一些東西。 :) –