2013-06-13 102 views
-2

我正在做下面的查詢。如果我把數字直接放入查詢中,查詢將返回很多結果...現在,如果我使用bindParam傳遞值,則不會有結果。當使用PDO :: bindParam時,我的查詢返回沒有結果

我測試是否傳遞的值具有值和回波顯示,他們這樣做...所以我不知道爲什麼會這樣

誰能告訴我什麼我做錯了什麼?

public function searchWithPagination($startPage = 0, $numberResultsPerPage = 10) { 

$q = $this->db->prepare('SELECT * FROM ecm LIMIT :startpage, :numberresultsperpage'); 
$q->bindParam(':startpage', $startPage); 
$q->bindParam(':numberresultsperpage', $numberResultsPerPage); 
$q->execute(); 
echo $numberResultsPerPage . $startPage ; 
$f = $q->fetchAll(); 
var_dump($f); 
} 

編輯:試圖PDO::PARAM_INT仍然不起作用

+0

改爲嘗試bindValue。在用戶在PHP手冊中提交的註釋(http://www.php.net/manual/en/pdostatement.bindvalue.php)中有關於bindParam傳遞引用的註釋。 – GarethL

+0

首先,PDO :: PARAM_INT ** [does work](http://stackoverflow.com/a/15991623/285587)**。其次,[PDO查詢失敗,但我看不到任何錯誤。如何從PDO獲取錯誤消息?](http://stackoverflow.com/a/15990858/285587) –

+0

@GarethL使它工作!謝謝。請將其發佈爲答案 –

回答

0

嘗試使用bindValue而不是bindParam。在用戶在PHP手冊中提交的註釋(php.net/manual/en/pdostatement.bindvalue.php)中有關於通過引用傳遞的bindParam的註釋,而bindValue沒有。

+0

只是bindValue沒有工作。由於某種原因,我還必須包含類型cast(int)$變量。您可能需要將您的答案改爲完全符合要求 –

0

極限參數必須被綁定爲整數,默認綁定爲字符串。

$q->bindParam(':startpage', $startPage, PDO::PARAM_INT); 
$q->bindParam(':numberresultsperpage', $numberResultsPerPage, PDO::PARAM_INT); 
+0

也嘗試過。它不工作 –

0

正如它在另一個提問/回答指出:

How to apply bindValue method in LIMIT clause?

你需要明確爲INT的綁定參數,可以也應該扮演他們作爲整數。

$q->bindParam(':numberresultsperpage', (int)$numberResultsPerPage, PDO::PARAM_INT); 
+0

我試過了,我得到另一個錯誤,說'不能通過參考傳遞參數2' –

+0

另一個評論說它取決於PHP版本,即5.3你應該使用(intval)。你也應該使用bindValue –

0

問題出在您的問題上。

在實際運行的代碼,你要綁定常量

$q->bindParam(':startpage', 0); 
$q->bindParam(':numberresultsperpage', 10); 

導致錯誤你提到其中:

Cannot pass parameter 2 by reference 

但在你張貼在這裏的代碼,你是綁定變量

$q->bindParam(':startpage', $startPage); 
$q->bindParam(':numberresultsperpage', $numberResultsPerPage); 

哪個作品好,如果喂PDO::PARAM_INT或者如果emu語言代碼關閉。