出于某种原因,当我通过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);
我正在打破我的脑袋!
答案 0 :(得分:7)
您的查询生成cartesian product
,因为您尚未提供两个表之间的关系:bookmarks
和users
,
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}"
祝你好运。