2014-02-10 132 views
1

我想將我的PDO查詢參數作爲數組傳遞給我的execute()方法,而不是使用PDO的bindParams。我這樣做,所以我可以創建一個函數來動態執行具有不同數量參數的類似查詢。

的bindParam()途徑產生預期的結果:

$stmt->bindParam(":user_id",$user_id,PDO::PARAM_INT); 
$stmt->bindParam(":n",$n,PDO::PARAM_INT); 

$stmt->execute(); 

但是這個方法返回一個空集,沒有錯誤拋出:

$params = array(":user_id"=>$user_id,":n"=>$n); 

$stmt->execute($params); 

有人能向我解釋一下這些之間的區別有兩種方法,是什麼導致我的問題?我看到的唯一區別是當我傳遞$ params作爲.execute的參數時,我沒有機會指定類型(POD :: PARAM_INT)。如果這是問題,是否有解決方法?

+0

這不是一個重複的問題。那個問題問哪一個使用,我的問題是如何正確使用execute。在將問題標爲重複之前,請仔細閱讀。 – nathan

+2

你的問題是一個典型的[** xy問題**](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)如果你問過綁定LIMIT變量,你會有發現很多答案[** ie **](http://stackoverflow.com/questions/2269840/php-pdo-bindvalue-in-limit) –

+0

@davidstrachan,我同意。我儘量具體,但在提出問題時,我沒有意識到LIMIT的價值與我的問題有任何關係。 – nathan

回答

0

我發現這個查詢失敗了,因爲我試圖給一個LIMIT子句賦值一個參數。將參數傳遞給execute函數時,PDO將所有參數包含在引號中,而LIMIT子句不能處理帶引號的參數。

解決方案(直到我找到更好的東西,我仍然希望)是查詢的老學習字符串連接,以在添加其餘參數之前生成完整的LIMIT子句。