我有这个
$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‘,并且在我的表的电子邮件列中有一个d和f。
当我运行查询时,我得到了这样的错误:错误:未知的列'd‘在'where子句’with查询“
我完全是mysql的新手,所以我希望我在这里遗漏了一些非常基本的东西。任何帮助都是非常感谢的!
发布于 2012-05-07 07:30:11
很不错的SQL injection洞。享受您的服务器的pwn3d。
IN语法的工作方式为
WHERE field IN (value1, value2, value3, ...)或
WHERE value IN (field1, field2, field3, ...)假设你得到的是“没有这样的d”,你可能忘了引用这些值,生成
WHERE field IN (d, f)它被称为“域d”和“域f",其中它应该是:
WHERE field IN ('d', 'f')注意引号-它们将这些d和f转换为字符串,而不是字段名称。
发布于 2012-05-07 07:34:12
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);此外,正如马克指出的那样,对于要放在查询中的客户端变量,最好使用mysql_real_escape_string()。
https://stackoverflow.com/questions/10475156
复制相似问题