【发布时间】:2013-08-04 19:33:45
【问题描述】:
请帮我解决这个问题。第一个查询将返回一条消息,说明
Couldn't execute query: Unknown column 'ssd23' in 'where clause.
ssd23 是$_POST 将从 html 表单中为 pnumber 获取的值。但是,如果只有数字,它会起作用。
$result = mysqli_query($con, "DELETE FROM Tools WHERE PartNumber = {'$_POST['pnumber']'}") or die ("Couldn't execute query: " .mysqli_error($con));
使用变量后,下面的第二个查询将同时处理数字和字符。
$test = $_POST['pnumber'];
$result = mysqli_query($con, "DELETE FROM Tools WHERE PartNumber = '$test'") or die ("Couldn't execute query: " .mysqli_error($con));
【问题讨论】:
-
这段代码中存在SQL注入漏洞,这意味着您的网站将在短时间内被黑客入侵。请不要使用此代码!
-
使用准备好的语句将动态输入传递给 SQL 查询。它们专为提高安全性而设计,并且它们将帮助您在未来避免此特定问题。
-
value 周围显然缺少引号,然后将其视为字段名称。有趣的是,你无意中利用了你自己代码的 SQL 注入漏洞:D
-
感谢您就 SQL 注入向我发出警告。我读了一些关于它的内容,并得到了广泛的想法。我正在学习 PHP 并建立一个带有数据库的练习网站。使用登录后可用的 SQL 界面。:) 感谢 Sylvain Leroux 指出缺少的引号,这有点回答了我的问题 :)