我有一个动态的类别列表,从mySQL中检索。当用户单击某个类别时,它会从该DB加载该特定类别的图像。这是它的功能:
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"));
}
但这不起作用,现在我甚至没有得到图像。
怎么做?
答案 0 :(得分:4)
SQL查询中存在错误,categoryID不明确。尝试:
SELECT
categories.categoryName,
images.imageFileName,
images.imageHeader
FROM
images
JOIN
categories on categories.categoryID = images.categoryID
WHERE
categories.categoryID=$categoryID;
答案 1 :(得分: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注入。
答案 2 :(得分: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) . ";"
答案 3 :(得分:1)
我认为您必须使用表名限定WHERE
子句中的字段,即
WHERE image.categoryID=$categoryID
数据库引擎不知道您所指的两个categoryID字段中的哪一个。如果再遇到这样的问题,你应该在MySQL命令行上测试查询。在那里你会收到一条错误消息,这对修复你的错误非常有帮助。