打印出仅选择user2_id的行数


Print out num rows only selecting user2_id's

我试图只打印出streamdata_feedback表中包含user2_ids的行数,它似乎同时打印出user2_id和user1_id。如何使用以下代码纠正此问题?

$user1_id=$_SESSION['id'];
$user2_id=$data['id'];
$likesqltwo = "SELECT *
    FROM streamdata_feedback
    WHERE feedback_rating = 1
        AND feedback_userid = " . $user2_id .
        "AND feedback_streamid = " . $streamid;
$likequerytwo = mysql_query($likesqltwo);
$num3 = mysql_num_rows($likequerytwo);
if ($num3 > 0)
{
    echo "And <a title = 'See who likes " .
        $poster_name['fullusersname'] .
        "s status' href='include/likes.php?streamitem_id=" .
        $streamitem_data['streamitem_id']."' />" . 
        $num3 . " ";
}

你有MySQL数据库的客户端吗?我建议选择SqlYog社区版。然后,您可以对它执行查询,并查看在 PHP 代码之外返回了多少行。一旦你有一个令人满意的查询,然后把它合并到你的PHP项目中。

下一个提示:您可以将 PHP 中的变量直接包含在带有双引号的字符串中。PHP 将解析变量,您无需连接。例如:

$likesqltwo =
    "SELECT *
    FROM streamdata_feedback
    WHERE feedback_rating = 1
    AND feedback_userid = $user2_id
    AND feedback_streamid = $streamid;";

但是,此代码仍然存在一个潜在的缺陷,那就是SQL注入攻击。因此,请确保您包含的变量不是来自用户,或者点击链接以了解有关防止此类事情的更多信息。这不是你寻求帮助的,但我认为值得一提。

若要了解特定feedback_streamidfeedback_userid等于 $user2_id 的次数,并且仅feedback_rating值为 1,可以尝试以下查询:

SELECT COUNT(id)
FROM streamdata_feedback
WHERE feedback_rating = 1
AND feedback_userid = 123
AND feedback_streamid = 456;

将您的主键替换为 id ,并将正确的用户 ID 和流 ID 分别替换为 123 和 456。如果您得到意外数量的结果,我建议您删除COUNT(id)并选择感兴趣的列,以便您可以检查并查看为什么您获得的行数比您想象的要多。