2012-03-07 9 views
1

私は、mySQLから取得されたカテゴリの動的リストを持っています。ユーザーがカテゴリをクリックすると、その特定のカテゴリの画像がDBからロードされます。mySQLのさまざまなテーブルから列を選択

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

今、私はまた、「カテゴリ」テーブルから再びまた、カテゴリ名を取得するには(ページの他の部分で選択したカテゴリの名前を含める):これはそれをしない機能です。私はこれをやろうとしました:

しかし、今私はイメージを取得しません。

どうすればできますか?

+1

'カテゴリIDを...'あいまいです。 'WHERE categories.categoryID ... 'を試してください –

答えて

4

WHERE句では、categoryIDがあいまいです。

WHERE categoryID=$categoryID 

カテゴリIDを持つ2つのテーブルがあるので、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アプリケーションの場合は、SQLインジェクションから保護するために$ categoryIDをエスケープすることを検討してください。

+0

ありがとうございました!はい、それはうまくいきました、今私はカテゴリの名前と画像を取得! 私はPHPとJSで開発しています。そして、はい、それはウェブ用です。ユーザーが$ categoryID部分を見ているとは思えませんが、リンクをクリックするとJSコードが表示されます:javascript:getImages(4)、getImagesはAPI.phpを呼び出す関数です私のgetImages()関数を保持しているBusinessLogic.phpのAPI.phpをSELECT文と一緒に使用します。しかし、私はいくつかのコメントフィールドを同様に作ろうとしているので、SQLインジェクションについてもっと知りたいと思うでしょう... – Igal

4

SQLクエリにエラーがあります。カテゴリIDはあいまいです。試してください:

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

私はdatabseエンジンはあなたが意味する2つの区分コードフィールドのどの知らない

WHERE image.categoryID=$categoryID 

すなわち

、あなたがテーブル名を使用して WHERE句でフィールドを修飾する必要がありますと思います。このような問題が発生した場合は、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) . ";" 
関連する問題