PHP MySQL搜索数组中的数据

时间:2013-10-15 07:39:45

标签: php mysql sql mysqli code-injection

我正在做一个设置基本社交网络的练习项目。我有一个表,其中包含用户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注入(因为“查询”来自用户搜索),但是没有正确理解它,所以对此的帮助也会很好。谢谢!

1 个答案:

答案 0 :(得分:3)

你应该创建一个新表,例如'friends',并包含在其中,结构如下:user_id | friend_id。它应该是这样的:

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

并且

SELECT * FROM friends WHERE user_id = $our_user_id

并使用:JOIN语法。

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