在访问我的数据库时,我让用户填写一个表单,然后在目标页面中,发布的值将用于生成的 MySQL 查询中。
$query = mysql_query("SELECT pass FROM database WHERE user='$_POST[user]'");
然而,由于某种原因,MySQL 不喜欢我在命令中使用 $_POST 变量,并且只有在我定义时它才有效(例如)$user = $_POST['user'];
,然后直接将$user放入SQL命令中。
另一方面,我可以在不需要特定列名的 INSERT 语句中使用 $_POST 值:
$query = mysql_query("INSERT INTO database VALUES ('foo', 'bar', '$_POST[user]'");
如果我尝试使用定义了属性的 INSERT 语句(例如user='foo'
),那么就会出现同样的问题。
我在 SQL 查询中做错了什么,导致命令在运行时出错,但可以使用格式化 INSERT 命令的特定方法?
希望这不是“运气不好,看起来你必须分配所有发布的值”。呵呵。
首先,留意 SQL 注入 https://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain!
现在,要回答您的问题,请尝试这样做:
$query = mysql_query("SELECT `pass` FROM `database` WHERE `user` LIKE '" . mysql_escape_string($_POST['user']) . "';");
你做错了几件事:
- 使用
=
运算符而不是LIKE
操作员
- 未将 SQL 查询中的值括起来
'
- 不将用户索引包含在
$_POST
数组与'
PS:你应该使用mysql_real_escape_string() http://php.net/manual/en/function.mysql-real-escape-string.php代替mysql_escape_string() http://php.net/manual/en/function.mysql-escape-string.php!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)