SQL PHP 中的语句不使用我提供的值进行操作

SQL statement in PHP don't operate with the value I give

所以我尝试根据用户名对 SQL table 中的数据进行排序。这个概念是基于连接到网站的用户。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Profile</title>
    <style type="text/css">
        input{
            border: none;
        }
    </style>
</head>
<body>

<table  cellspacing= 0 cellpadding=10>
        <tr>
            <td>#</td>
            <td>Expeditor</td>
            <td>Mesaj</td>                              
        </tr>
        <?php
            $i=1;
        $id2= $_SESSION["id"];
        $result= mysqli_query($conn, "SELECT * FROM tb_user WHERE id= $id2");
        $row = $result->fetch_assoc();
        $userconn = $row['username'];
        $rows= mysqli_query($conn, "SELECT * FROM mesajeuseri WHERE username='$userconn'")
                                    
        ?>
        <?php foreach ($rows as $row): ?>
        <tr>
            <td><?php echo $i++; ?></td>
            <td><?php echo $row["user"] ?></td>
            <td><?php echo $row["descriere"]; ?></td>

            <td>
                <a href="">Contact</a>
            </td>
        </tr>
        <?php endforeach; ?>    
</table>
                




</body>
</html>

如您所见,我尝试使用 SQL 语句,其中我使用条件 username=$userconn(如果我尝试回显此值,它会显示正确的值)。我不确定这是否可以这样工作。如果我这样离开它,将不会显示任何结果,例如 table 是空的,但我有几行有多个用户。这是我的 table:

这是我的 table 用户:

我知道这不安全,因为 SQL 注入并且创建我自己的语句不健康,但首先我想看到它按预期工作。

首先,$row 在您试图为其赋值之前未定义

$userconn = $row['username'];

其次,您容易受到 SQL 注入的攻击...考虑使用 OOP 方法使用准备好的语句来确保安全(其中 $mysqli = $conn)

$stmt=$mysqli->prepare("SELECT * FROM mesajeuseri WHERE username = ?");
$stmt->bind_param('s',$userconn);
$stmt->execute();
$result=$stmt->get_result();
while($row=$result->fetch_assoc()){
  $rows[]=$row;
}

第三,考虑定义要选择的列,而不是使用 * 选择器,因为这可能会导致意外泄漏您未预料到的列,例如密码存储在列中

第四,您可以尝试使用 JOIN...稍微复杂一点,但它提供了非常快的性能。您需要研究联接,以便根据您想要实现的目标做出正确的联接类型。看起来 INNER JOIN 可能适合您要执行的操作,但我不能肯定地说。

当您尝试初始化 $userconn 时,

$row 未定义。您需要正确初始化 $row,执行

$row = $result->fetch_assoc();

在你

之前
$userconn = $row['username'];

行。

其他人已经警告过你SQL注入的危险,你在问题中明确告诉我们你知道这个问题,你想暂时忽略它,所以我会避免说教SQL 注射的危险。但是,一旦它开始工作,请不要忘记它。

$result= mysqli_query($conn, "SELECT * FROM tb_user WHERE id= $id2");
$userconn = $row['username'];
$rows= mysqli_query($conn, "SELECT * FROM mesajeuseri WHERE username='$userconn'")

此外,您应该考虑加入像

这样的值
select *
from tb_user
join mesajuseri
on tb_user.username = mesajuseri.username and
   id = 123

这也可以用来轻松解决SQL注入漏洞,只要id应该是一个数字,因为你可以简单地连接intval($_SESSION['id']) 并且保证是一个数字。