2012-03-07 3 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 ...' –

ответ

4

В вашем предложении WHERE категорияID неоднозначна.

WHERE categoryID=$categoryID 

Поскольку у вас есть две таблицы с категориейID, вам нужно определить, к какому ГДЕ следует смотреть.

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 

Кроме того, на какой язык вы развиваетесь? Если это веб-приложение, вам может потребоваться экранирование $ categoryID для защиты от SQL-инъекции.

+0

Большое спасибо! Да, это сработало, теперь я получаю название категории и изображения! Я развиваюсь в PHP и JS. И да, это для Интернета. Хотя я не думаю, что пользователи даже видят часть $ categoryID - когда они нажимают ссылку, они видят JS-код, например: javascript: getImages (4), где getImages - это функция, которая вызывает API.php и API.php для BusinessLogic.php, который содержит мою функцию getImages() с оператором SELECT. Но я бы хотел узнать больше о SQL-инъекции, так как планирую также создавать поля комментариев ... – Igal

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

Rehashing то, что уже было сказано, попробуйте налево присоединиться к так, что изображения, которые не классифицированы, не отфильтрованы и использовать побег, такие как:

$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) . ";" 
Смежные вопросы