0

我正在做一个建立基本社交网络的实践项目。我有一个包含用户 ID、姓名、姓氏和朋友列的表格,其中包含与他们成为朋友的所有其他“用户”的 ID 号。例如 3 “唐纳德” “鸭子” “4, 5, 23, 42”。
如果我知道这些值,则以下工作:

if(mysqli_connect_errno($con))  {
    echo "failed to connect" . mysql_connect_error();
} else {
    $resulting = mysqli_query($con, "SELECT * FROM $tbl_name WHERE LastName LIKE '%$secondquery%'
        OR LastName LIKE '%$firstquery%'
        OR LastName LIKE '%$thirdquery%'
        OR LastName LIKE '%$fourthquery%'
        OR FirstName LIKE '%$secondquery%'
        OR FirstName LIKE '%$firstquery%'
        OR FirstName LIKE '%$thirdquery%'
        OR FirstName LIKE '%$fourthquery%'
    ");
    $counting = mysqli_num_rows($resulting);

    if($counting != 0){
        while($row = mysqli_fetch_array($resulting))
        {
            if($row['Profile'] != null) {
                $defaultprofilepic = $row['Profile'];
            }else {
                $defaultprofilepic = "defaultprofile.JPG";
            }
            $PublicProfile = $row['ProfilePage'];
            $Friends = array("4", "5", "23", "42") 
            if(in_array(42, $Friends)){
                echo $row['FirstName'] . " is your friend!";
            } else {
                echo "Connect with " . $row['FirstName'];
            }
        }
    }
}

但是,无论数据在数据库中如何显示(例如“1”、“2”、“42”或“1、2、3、4”或 1 2 3 4 ,我都无法正常工作。如果 42 是列表中的第一个,那么它通常会起作用,但这不是很有帮助!

$Friends = array($row['Friends'];
if(in_array(42, $Friends)) {
    echo $row['FirstName'] . " is your friend!";
} else {
    echo "Connect with " . $row['FirstName'];
}

我知道可能有更好的方法可以做到这一点,甚至可以存储相关数据,因此欢迎提出任何建议!我也知道以下内容可能容易受到 sql 注入的影响(因为“查询”来自用户搜索),但还没有正确理解这一点,因此对此的帮助也会很好。谢谢!

4

1 回答 1

3

您应该创建新表,例如“朋友”,并包含在其中,结构如下:user_id | 朋友ID。它应该如下所示:

user_id | friend_id
    1   |     1
    1   |     2
    1   |     3
    2   |     4

SELECT * FROM friends WHERE user_id = $our_user_id

并使用 : JOIN语法。

(顺便说一句。更好地学习 PDO)

于 2013-10-15T07:56:32.763 回答