gpt4 book ai didi

php - SELECT WHERE id 不检索记录,没有显示

转载 作者:行者123 更新时间:2023-11-29 01:13:42 25 4
gpt4 key购买 nike

这段代码对我不起作用。我的 list.php 显示了所有成员。如果我连续单击编辑,我会转到我的 update.php,它显示 'update.php?id=# 并且我有一小段代码来显示始终正确的数字。但我无法显示人员信息。这是我的东西

<?
$id = $_GET['id'];
echo "<print>" .$id."</print>";
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER_SET utf8");
header('Content-type: text/html;charset=utf-8');
$order = 'SELECT * FROM `person` WHERE `PersonID` = $id';
$result = mysql_query($order);
?>

它应该在我的表中显示人员信息,就像在我的 list.php 中显示的一样,但什么也没显示?例如,如果我替换 'PersonID' = 1234,我就会得到一些信息。为什么代码不使用 $id 并将其放在 'PersonID' = . 之后?

最佳答案

您正在将 $_GET['id'] 的内容直接传递到数据库 - 如果有人传递一个 1' 变量怎么办?充其量只会破坏查询;在最坏的情况下,有人可以对您的数据库做一些令人讨厌的事情。至少,您需要清理数据。

mysql_real_escape_string 会让你转义一个字符串,这样你就可以做到这一点;如果PersonID` 是一个整数,您还可以使用 intval获取字符串的整数值,并停止以这种方式传递无效字符。

您看到的实际问题是因为 PHP 将带单引号的字符串视为字符串文字;它不会解析它以查看是否有需要替换的变量。它将 $id 视为一个字符串。要执行您想要执行的操作,您需要使用双引号:

$id = intval($_GET['id']);
$order = "SELECT * FROM `person` WHERE `PersonID` = $id";

您还应该考虑远离 mysql_* 函数,因为它们已被弃用。为避免这种情况,请考虑改用 mysqli_* 或 PDO。通过使用准备好的语句并将变量绑定(bind)到它们,这两者都将帮助您编写更安全的代码。

关于php - SELECT WHERE id 不检索记录,没有显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17817349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com