0

我有这个

$sql=mysql_query("SELECT EMAIL FROM USERNAME WHERE EMAIL <> '".$_REQUEST['EMAIL']."' AND EMAIL NOT IN (".$str.")") or die("Error: ". mysql_error(). " with query ". $sql);

例如 $str 保存值 'd','f' 并且在我的表的 EMAIL 列中有 ad 和 f。

当我运行查询时,我收到此错误“错误:带有查询的‘where 子句’中的未知列‘d’”

我完全是 mysql 的菜鸟,所以我希望我只是在这里遗漏了一些非常基本的东西。任何帮助是极大的赞赏!

4

2 回答 2

2

那里有很好的SQL 注入孔。享受您的服务器 pwn3d。

IN语法可以作为

WHERE field IN (value1, value2, value3, ...)

或者

WHERE value IN (field1, field2, field3, ...)

鉴于您得到的是 'no such d,您可能忘记引用这些值,从而产生

WHERE field IN (d, f)

它被解释为“字段 d”和“字段 f”,它应该是:

WHERE field IN ('d', 'f')

注意引号 - 它们将那些 d 和 f 转换为字符串,而不是字段名称。

于 2012-05-06T23:30:10.750 回答
0

您在NOT IN部分之后缺少单引号。它应该是:

$sql = mysql_query("
        SELECT EMAIL FROM USERNAME WHERE EMAIL <> '".$_REQUEST['EMAIL']
        ."' AND EMAIL NOT IN ('".$str."')"
    ) or die("Error: ". mysql_error(). " with query ". $sql);

此外,正如 Marc 指出的那样,您最好在要放入查询中的客户端变量上使用mysql_real_escape_string() 。

于 2012-05-06T23:34:11.663 回答