这段代码对我不起作用.我的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' = .?
你将$ _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.通过使用预处理语句和绑定变量,这两种方法都可以帮助您编写更加安全的代码.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |