2012-10-24 48 views
0

我想獲取產品ID的數組列表,獲取關聯的數據(存儲在另一個表中,我知道...這是很糟糕的設置),然後根據產品名稱對它們進行字母順序排列。以下是我迄今:採取一系列的ID號碼,並從另一個表中按字母順序收集信息

$set = array($aID['id']); 
$getInfo = mysql_query("SELECT * FROM tbl WHERE FIND_IN_SET('$set', id) ORDER BY name ASC"); 
while($product = mysql_fetch_array($getInfo)) 
    { 
     echo $product['name'] . " <br /\n"; 
    } 

我收到了,而第一行的錯誤消息,這意味着什麼是錯的我的$的getInfo查詢行。我究竟做錯了什麼?任何幫助和所有建設性的批評表示讚賞。

+0

您是否嘗試過呼應了您的SQL語句,並直接在數據庫中運行呢? – andrewsi

+0

什麼是錯誤信息? –

+0

即使這些ID是安全的,您仍然應該參數化查詢。而當你在它的時候,找到一個正確參數化數組的機制。 (例如'(「SELECT ... IN(:set)」,array('set'=> $ set))' –

回答

3

你不能將數組傳遞給mysql。您需要將其轉換爲以逗號分隔的字符串:

$set = array($aID['id']); 
$set = implode(',' $set); 

此外,您的FIND_IN_SET中的順序相反。它應該是

FIND_IN_SET(id, '$set') 

老實說,我只是用IN作爲FIND_IN_SET返回的地方是在設置索引,不是你想大概是什麼:

SELECT * FROM tbl WHERE id IN ($set) ORDER BY name ASC 
+0

這是有道理的,但我得到一個錯誤... – NotJay

+0

解析錯誤:語法錯誤,意外T_VARIABLE – NotJay

+0

@NotJay如果集是一組非整數,您需要引用每個數組元素以將它傳遞給'IN' – Ray

0

我認爲,它需要$設置爲mysql查詢的一部分。你應該表明它是一個外部變量從PHP這樣的:

$getInfo = mysql_query("SELECT * FROM tbl WHERE FIND_IN_SET('.$set.', id) ORDER BY name ASC"); 
+1

'$ set'是一個數組..它只會打印數組,並且查詢仍然無效 – Cfreak

0

您還可以使用IN

$ids = implode(",",$set); 
$getInfo = mysql_query("SELECT * FROM tbl WHERE id IN (".$id.") ORDER BY name ASC"); 
相關問題