2012-03-28 82 views
0

我正在构建一个照片上传网站,并且我已经将两个表连接在一起以显示上传图像的用户的用户名。这可以工作,但它会在数据库中打印每个名称,而不仅仅是所选图像。加入表后从MySql中选择某些行信息

选定的图像是使用下面的查询叫...

$data = mysql_query("SELECT * FROM photos WHERE id=$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 2012-03-28 00:24:09

+1

看看[这个问题/答案](http://stackoverflow.com/a/60496/1248861) – joshuahealy 2012-03-28 00:29:47

+0

没有教过任何这些东西......太棒了。感谢链接@appclay – GuerillaRadio 2012-03-28 00:37:49

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 2012-03-28 00:16:18

+0

没有关注你,我在查询中发布了答案中的图像标识符。 – Perception 2012-03-28 00:17:33

+0

现在排序,但感谢您的输入@Perception。 – GuerillaRadio 2012-03-28 00:25:43