PHP重复查询结果?

时间:2013-02-15 05:31:28

标签: php sql

出于某种原因,当我通过PHP运行此查询时,它返回8行,而实际上我的数据库中只有2行,当我通过phpmyadmin运行它时,它显然返回2.

 $sql = "SELECT url FROM bookmarks,users WHERE bookmarks.user_id = {$session->user_id}";
 $resultado = $db->query($sql);

 echo mysql_num_rows($resultado);

我正在打破我的脑袋!

2 个答案:

答案 0 :(得分:7)

您的查询生成cartesian product,因为您尚未提供两个表之间的关系:bookmarksusers

SELECT url 
FROM   bookmarks 
       INNER JOIN users 
          ON bookmarks.COLNAME = users.COLNAME
WHERE  bookmarks.user_id = '$session->user_id'

其中COLNAME是定义表彼此关联方式的列,或表格应如何链接的列。

要进一步了解联接,请访问以下链接:

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:3)

正如JW指出的那样,您正在制作笛卡尔积 - 您没有加入针对用户的书签。这就是你复制行的原因。

话虽如此,您在上述查询中根本不需要加入用户:

"SELECT url FROM bookmarks WHERE bookmarks.user_id = {$session->user_id}"
祝你好运。