2012-03-28 15 views
0

写真をアップロードしているWebサイトを構築していて、画像をアップロードしたユーザーのユーザー名を表示するために2つのテーブルを結合しました。これは機能しますが、選択されたイメージだけではなく、データベース内のすべての名前が印刷されます。テーブルを結合した後にMySqlから特定の行情報を選択

選択した画像は、次のクエリを使用して呼び出され...

$data = mysql_query("SELECT * FROM photos WHERE id=$imageID"); 

次のコードは、ユーザー名を表示しようと、私はそれが$ IMAGEIDの行のみを対象とする必要があります。どうすればいい?

<?php 
     $query = mysql_query("SELECT username, user_id ". 
     "FROM users, photos ". 
     "WHERE (users.id = photos.user_id)"); 
     while($uploader = mysql_fetch_array($query)) 
     { 
     echo $uploader['username']; } 
?> 

ありがとうございます。

答えて

1
<?php 
    $query = mysql_query("SELECT username, user_id ". 
    "FROM users, photos ". 
    "WHERE (users.id = photos.user_id and photos.id = $imageID)"); 
    while($uploader = mysql_fetch_array($query)) 
    { 
    echo $uploader['username']; } 
?> 

をしかし、あなたはちょうどまっすぐにあなたのSQLに変数を代入しているし、それがインジェクション攻撃の対象となる可能性があるので、これはちょっと危険なです。同じことがあなたの他のクエリにも当てはまります。

おそらく、パラメータ化されたクエリの使用を検討する必要があります。

+0

ありがとう非常にこれは完全に働いた。このプロジェクトは大学のスタッフだけが使用する予定であり、私はまだこれよりもはるかに複雑なものを生産する予定はありません。しかし、将来の参照のためには関心がありませんが、パラメータ化されたクエリはどういう意味ですか? – GuerillaRadio

+1

[この質問/回答](http://stackoverflow.com/a/60496/1248861)を見て – joshuahealy

+0

このようなことのいずれかを教えていない...素晴らしい。 @appclayのリンクありがとう – GuerillaRadio

1

実際に問題の写真のIDで検索結果を絞り込んだわけではありません。私は、あなたがより多くのこのようなクエリたい想像:

$data = mysql_query("SELECT u.username, p.user_id FROM users u, photos p WHERE u.id = p.user_id AND p.id = $imageID"); 
+0

これは別のページで行われ、うまく動作します。 $ imageIDはどこかのクエリに追加する必要のある変数です。 – GuerillaRadio

+0

そこを辿っていないので、答えに投稿したクエリに画像識別子があります。 – Perception

+0

今すぐソートされましたが、あなたの入力@Perceptionに感謝します。 – GuerillaRadio

関連する問題