2015-01-16 105 views
2

我有一個foreach循環,我想執行一個準備語句pdo。我已閱讀做一個參考的幾個職位,但我不知道怎麼跟我的代碼做到這一點:PDO bindParam()PHP Foreach循環

$str = ":City, Aurora; :State, CO"; 
$wherestr = explode(";",$str); 

$sql = "SELECT * FROM Organization WHERE City = :City AND State= :State"; 
$stmt = $db->prepare($sql); 

foreach ($wherestr as $ws) { 
$ws = explode(",",$ws); 
$ws0 = trim($ws[0]); 
$ws1 = trim($ws[1]); 
$stmt->bindParam($ws0,$ws1); 
} 
$stmt->execute(); 

我在這裏讀Binding params for PDO statement inside a loop,你可以通過創建一個具有&符號的引用,使這項工作,但我沒有像他們那樣使用Key => Value。任何人都可以幫助我得到這個通過Param循環並執行?

如果我只有一個WHERE(:var),那麼它工作正常,但如果我有多個WHERE過濾器,它似乎覆蓋了前面的過濾器,而不是執行execute語句中的所有bindParams。我沒有得到任何錯誤,只是沒有用多個var正確地過濾結果。

謝謝。

+0

您錯誤地使用了'foreach'。您可以覆蓋每個循環中的參數。 – Raptor

+0

我知道那很多,這就是爲什麼我寫這篇文章。我需要知道如何解決它! – user982853

+0

我們需要知道您的SQL語句如何才能提供幫助。 – Raptor

回答

4

你應該使用bindParam這樣的:

$sql = 'SELECT * FROM Organization WHERE City = :City AND State= :State'; 
$wherestr = array('string1', 'string2'); 
$stmt = $db->prepare($sql); 
$stmt->bindParam(':City', $wherestr[0]); 
$stmt->bindParam(':State', $wherestr[1]); 
$stmt->execute(); 

如果你堅持使用foreach,這裏是一個辦法:

$stmt = $db->prepare($sql); 
$params = array(':City' => 'string1', ':State' => 'string2'); 
foreach ($params as $key => &$val) { 
    $stmt->bindParam($key, $val); 
} 
$stmt->execute(); 

注意,我們在循環,使用通過引用傳遞這是必須的。

+0

不客氣。如果你發現有用的答案,請注意它。謝謝。 – Raptor

0

到猛禽的反應類似,您可以簡單地把數組裏面的execute()像這樣:

$stmt = $db->prepare($sql); 
$stmt->execute(array(':City' => 'string1', ':State' => 'string2')); 

這可能最終會非常unreadble有足夠長的聲明中雖然。