出于某种原因,当我通过 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);
我要打破我的头了!
您的查询产生cartesian product
是因为您没有提供两个表之间的关系:bookmarks
并且users
,
SELECT url
FROM bookmarks
INNER JOIN users
ON bookmarks.COLNAME = users.COLNAME
WHERE bookmarks.user_id = '$session->user_id'
whereCOLNAME
是定义表如何相互关联或表应如何链接的列。
要进一步了解有关联接的更多信息,请访问以下链接:
作为旁注,SQL Injection
如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
正如 JW 指出的那样,您正在生产笛卡尔积——您没有加入针对用户的书签。这就是为什么你要复制行。
话虽如此,您根本不需要在上述查询中加入用户:
"SELECT url FROM bookmarks WHERE bookmarks.user_id = {$session->user_id}"
祝你好运。