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'])
并且保证是一个数字。
所以我尝试根据用户名对 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'])
并且保证是一个数字。