检查朋友关系是否已存在

时间:2010-01-10 05:53:00

标签: php mysql

为什么这段代码不起作用?我想在添加之前检查用户是否已经是朋友。

function addFriend() 
{
    global $userid, $friendid;
    $check = mysql_query("SELECT * FROM friends WHERE userid = $userid AND friendid = $friendid");  
    if (mysql_num_rows($check) == 1)
    {
        exit("Youre already friend with this user");
    } 
    else 
    {
        $sql = "INSERT INTO friends (userid, friendid) VALUES ($userid, $friendid)";
        mysql_query($sql);

        if ($sql)
             echo "Success";
        else 
             echo "Failure";
    }
}

5 个答案:

答案 0 :(得分:1)

这可能无法解答您的问题,但$sql永远不会出错,因为您将其设置为3行以上。

如果您的数据库在字段对上没有任何唯一约束,您可能希望将mysql_num_rows($check) == 1更改为mysql_num_rows($check) >= 1

答案 1 :(得分:0)

变化:

$sql = "INSERT INTO friends (userid, friendid) VALUES ($userid, $friendid)";
mysql_query($sql);
if ($sql)
  echo "Success";
else 
  echo "Failure";
}

为:

$sql = "INSERT INTO friends (userid, friendid) VALUES ($userid, $friendid)";
mysql_query($sql);
if (mysql_affected_rows()) {
  echo "Success";
else 
  echo "Failure";
}

请参阅mysql_affected_rows()

您的第一个版本将始终返回成功,因为您正在测试$sql是否为空,这不是因为您刚刚为其分配了非空值(作为查询的SQL) )。

答案 2 :(得分:0)

您是否尝试在查询中包含相反的情况?我相信朋友表根据请求的顺序表示谁是谁。所以,如果我要求你作为朋友,我会成为用户,但如果你要求我,我会成为朋友ID。因此,您还需要检查userid = $ friendid和friendid = $ userid。

的位置

可能是吗?很难从你的问题中看出究竟是什么问题。

注意:我不是PHP专家,所以我的回答是严格的Facebook API,而不是PHP本身。只是说明我可能会将我的答案降级: - )

答案 3 :(得分:0)

就像Mike B上面所说的那样,$sql永远不会是假的,因为你将它设置为查询。您需要将查询结果设置为变量,然后测试:

$result = mysql_query($sql);
if ($result)
    echo "Success";
else 
    echo "Failure";
}

答案 4 :(得分:-1)

修好了

朋友表中没有任何auto_increment