2012-11-30 98 views
0

這裏MySQL查詢是我的數組:基於PHP陣列

array (size=2) 
    100 => 
    array (size=2) 
     'trade' => int 5 
     'gold' => int 10 
    101 => 
    array (size=2) 
     'trade' => int 10 
     'gold' => int 20 

陣列的關鍵是,我想在查詢運行用戶的ID。我想通了,我可能需要在使用中,例如:

SELECT * FROM `users` WHERE `id` IN (:id) 

(:身份證是由$ ID在腳本代替)

現在,當我做

 SELECT * FROM `users` WHERE `id` IN (100,105) 

(用於測試目的) 有用。

雖然它需要被如此製備當我設置

$id = 100,101; 

$id = ‘100,101’; 

它只顯示100記錄。

任何想法? 感謝

+0

不確定你是什麼問。你在問你如何去改變這個準備好的聲明? – Shane

+0

我在問爲什麼它的作品,當我把它直接進入查詢,而不是在準備好的聲明中分配 - 謝謝。 – MrGuitarWizard

+0

如果你通過mysqli傳遞細節,我認爲發生的事情是它已經過去了,你想要一個「100,101」的ID,而不是一個ID爲100或ID爲101.不希望工作,但如果它有,我會假設mysql通過刪除第一個非數字和後面的任何東西(即逗號和101)將字符串「100,101」轉換爲整數,因此匹配只是100.通過變量長度列表像一個項目是一個痛苦的參數! – Kickstart

回答

0

您可以使用implodearray_keys

"SELECT * FROM `users` WHERE `id` IN (" . implode(",", array_keys($array)) . ")" 

您可以通過使用/手動指定數組測試:

$array = array(
    100 => array(
     'trade' => 5, 
     'gold' => 10, 
    ), 
    101 => array(
     'trade' => 10, 
     'gold' => 20, 
    ) 
); 

$sql = "SELECT * FROM `users` WHERE `id` IN (" . implode(",", array_keys($array)) . ")"; 
$result = mysqli_query($sql); 

while($row = mysqli_fetch_assoc($result)){ 
    var_dump($row); 
} 

它已經實際測試和它的作品。

+0

好主意,但是這樣工作,直接將它加載到查詢中,但是當我在聲明中準備它時,它只是加載列表中的第一個,任何想法?謝謝 – MrGuitarWizard

+0

foreach(implode(「,」,array_keys($ array)as $ value) - 嘗試一個foreach循環,在綁定中使用$ value。 – Shane

+0

你試過了嗎?這應該是相同的SELECT * FROM'用戶'在哪裏'ID' IN(100,105) – SubRed

0

他們都錯了什麼ü做了$id = 100,101;$id = ‘100,101’; 試試這個

$id = "100,101"; 

或本

$id = '100,101'; 

,甚至可以做到這一點也

$id = 100; 
    $id .= ","; 
    $id .= 101 ;