SELECT WHERE id没有检索记录,没有显示任何内容

Bob*_*bby 2 php mysql

这段代码对我不起作用.我的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);
?>
Run Code Online (Sandbox Code Playgroud)

它应该在我的list.php中显示我的表中的人员信息,但没有显示出来?如果我替换'PersonID' = 1234为例如,我然后得到一些信息.为什么代码没有使用$id并放在后面'PersonID' = .

and*_*wsi 7

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

mysql_real_escape_stringwill let you escape a string so you can do this; if PersonID`是一个int,你也可以使用intval来获取字符串的整数值,并停止以这种方式传递的无效字符.

您看到的实际问题是因为PHP将带有单引号的字符串视为字符串文字; 它不会解析它是否有需要替换的变量.它被$id视为一个字符串.要做你想做的事,你需要使用双引号:

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

您还应该考虑远离mysql_*函数,因为它们已被弃用.为避免这种情况,请转而使用mysqli_*或PDO.通过使用预处理语句和绑定变量,这两种方法都可以帮助您编写更加安全的代码.

  • 谢谢各位..我在网上找到了代码,它似乎是老学校..只是在这里学习和所有评论表示赞赏.#从头开始.. (2认同)