2013-02-18 89 views
2

關於爲什麼以下內容會拋出參數錯誤的任何想法。我已經看過所有其他答案,但我正在以與解決方案相同的方式處理這個問題,但這似乎仍然不起作用。將應用程序從adodb切換到pdo。MySql find_in_set()與PHP PDO不搭配很好

$possible_keys = implode(",", $possible_keys_array); 

SQL片斷

WHERE 
FIND_IN_SET(table.key,:possible_keys) 

$STH = $DBH->prepare($sql); 

$STH->execute(array($possible_keys)); 

$STH->setFetchMode(PDO::FETCH_ASSOC); 

我只把代碼的快照。但是,如果使用possible_keys變量的實際文本替換:possible_keys佔位符,它一切正常。我在撓撓我的腦袋,爲什麼這不起作用,因爲無論如何變量只是一個字符串。它一直拋出以下錯誤:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined 

p.s.我只包含了被證明是問題的子句,而不是整個查詢。我知道其餘的都很好。

回答

1

您正在使用一個命名參數,但沒有像這樣綁定它。您需要指定名稱:

$STH->execute(array(':possible_keys' => $possible_keys)); 
+0

偉大的我現在會嘗試一下現在這一分鐘。我錯過了那一個。然而,它是如何爲所有其他查詢工作的。我在整個過程中都使用了指定的佔位符,但是使用了具有相同順序值的普通數組來將數據傳遞給stmt。它似乎在所有其他查詢中工作正常,爲什麼會這樣?我很感謝這些信息。 – jiraiya 2013-02-18 15:14:12

+0

它確實已經修復它,謝謝100萬。有趣的是,正如我上面所說,它適用於其餘部分,但不適用於find_in_set(),我只能假設它在所有情況下都不能安全使用非關聯數組,因此我將使它們全部關聯。再次感謝。 – jiraiya 2013-02-18 15:16:35

1

1)您正在使用指定的佔位符,但您傳遞的是非關聯數組。

如果您使用問號佔位符,傳遞一個數組,像這樣:

$STH->execute(array("a", "b", "c")) 

如果您使用指定的佔位符,傳遞一個數組,像這樣:

$STH->execute(array("name" => "a", "name2" => "b", "name3" => "c")) 

編輯:在我的回答中,我首先聲明你不能在現在有一個參數的地方放置一個參數(在IN()語句中)。顯然,那應該工作。

+0

感謝您的幫助也是一個很好的答案。 – jiraiya 2013-02-18 15:16:55