我应该如何在mysql_query函数中编写PHP $ _POST变量?

Jul*_*Lam 3 php mysql sql post sql-injection

在访问我的数据库时,我让用户填写表单,并在目标页面中,在生成的MySQL查询中使用发布的值.

$query = mysql_query("SELECT pass FROM database WHERE user='$_POST[user]'");
Run Code Online (Sandbox Code Playgroud)

但是,由于某种原因,MySQL不喜欢我在命令中使用$ _POST变量,它只在我定义(例如)时才有效$user = $_POST['user'];,然后将$ user直接放在SQL命令中.

另一方面,我可以在INSERT语句中使用$ _POST值,其中不需要特定的列名:

$query = mysql_query("INSERT INTO database VALUES ('foo', 'bar', '$_POST[user]'");
Run Code Online (Sandbox Code Playgroud)

如果我尝试定义属性的INSERT语句(例如user='foo'),则会出现相同的问题.

我在SQL查询中做错了什么导致命令在运行时出错,但是使用格式化INSERT命令的特定方法?

希望,这不是"运气不好,看起来你必须分配所有发布的价值".嘿.

Ali*_*xel 9

首先,注意SQL注入!

现在,要回答您的问题,请尝试执行此操作:

$query = mysql_query("SELECT `pass` FROM `database` WHERE `user` LIKE '" . mysql_escape_string($_POST['user']) . "';");
Run Code Online (Sandbox Code Playgroud)

你做错了几件事:

  • 使用=运算符而不是LIKE运算符
  • 不要将值包含在SQL查询中 '
  • 中不封闭用户索引$_POST阵列'

PS:你应该用mysql_real_escape_string()而不是mysql_escape_string()!