2012-03-07 10 views
1

我有一個動態的類別列表,它是從mySQL中檢索的。當用戶點擊一個類別時,它從數據庫中加載該特定類別的圖像。這是做它的函數:從mySQL中的各種表中選擇列

function getImages($categoryID) 
{ 
return json_encode(select("SELECT * FROM images WHERE categoryID=$categoryID")); 
} 

現在我也想再次也從「類別」表中檢索類別名稱(包括在頁面的另一部分選擇的類別的名稱)。我試圖做到這一點:

function getImages($categoryID) 
{ 
return json_encode(select(
     "SELECT categories.categoryName, images.imageFileName, images.imageHeader 
     FROM images JOIN categories 
     ON categories.categoryID = images.categoryID 
     WHERE categoryID=$categoryID")); 
} 

但沒有工作,現在我甚至沒有得到的圖像。

怎麼辦?

+1

'WHERE的categoryID ...'是含糊不清的。試試'WHERE categories.categoryID ...' – 2012-03-07 13:52:06

回答

4

在您的WHERE子句中,categoryID不明確。

WHERE categoryID=$categoryID 

由於您有兩個帶有categoryID的表,您需要確定WHERE應該查看哪個表。

WHERE categories.categoryID=$categoryID 

爲了讓生活更容易爲自己,你可能要考慮你的別名表,就像這樣:

SELECT c.categoryName, i.imageFileName, i.imageHeader 
FROM images i 
JOIN categories c ON c.categoryID = i.categoryID 
WHERE c.categoryID=$categoryID 

而且,它的語言是您發展?如果這是一個Web應用程序,則可能需要考慮轉義$ categoryID以防止SQL注入。

+0

非常感謝!是的,這工作,現在我得到類別名稱和圖像! 我用PHP和JS開發。是的,它適用於網絡。雖然我不認爲用戶會看到$ categoryID部分 - 當他們點擊鏈接時,他們會看到一個JS代碼,如下所示:javascript:getImages(4),其中getImages是調用API.php的函數和用於BusinessLogic.php的API.php,它使用SELECT語句保存我的getImages()函數。但我肯定想知道更多關於SQL注入的信息,因爲我打算創建一些註釋字段以及...... – Igal 2012-03-07 14:52:03

4

SQL查詢中存在錯誤,categoryID不明確。嘗試:

SELECT 
    categories.categoryName, 
    images.imageFileName, 
    images.imageHeader 
FROM 
    images 
JOIN 
    categories on categories.categoryID = images.categoryID 
WHERE 
    categories.categoryID=$categoryID; 
1

我想你一定有資格與表名的WHERE條款領域,即

WHERE image.categoryID=$categoryID 

的DATABSE引擎不知道你的意思是這兩個領域的categoryID的。如果再遇到這樣的問題,則應該在MySQL命令行上測試查詢。您會收到一條錯誤消息,這對於解決您的錯誤非常有用。

2

老調重彈什麼已經說過,儘量左加盟,使未分類的圖像沒有得到過濾和使用轉義如下列:

$query = "SELECT c.categoryName, i.imageFileName, i.imageHeader 
    FROM images i 
LEFT JOIN categories c 
    ON c.categoryID = i.categoryID 
WHERE c.categoryID= " . intval($categoryID) . ";"