是否可以转义整个查询而不是每个搜索字段。例如,我知道我可以这样做:
$name="O'Connor";
$email="mark.O'Connor@something.com";
$name=mysql_real_escape_string($name);
$email=mysql_real_escape_string($email);
$query =("SELECT * FROM TABLE1 WHERE Name = '$name' OR Email = '$email' ");
// code to run query here
我正在寻找的是一种构建我的查询字符串的方法:
$query=("SELECT * FROM TABLE1 WHERE Name = '$name' OR Email = '$email' ");
$query=mysql_real_escape_string($query); // Can I escape the whole Query ??
// code to run query here
我提出这个问题的原因我是否有一个复杂的查询,它使用来自表单的大约15个变量,我想一次清除它们而不是使用mysql_real_escape($ vairableName)的加载......
这是否可行,任何人都可以解释我如何实现这个
提前致谢
答案 0 :(得分:4)
你做不到。转义将SQL中具有特殊含义的字符更改为转义序列。您需要某些具有特殊含义的字符,以便查询可以正常工作。如果你可以逃避整个查询,那么所有数据库驱动程序都会自动执行此操作。
e.g。
$foo = "John O'Reilly";
$sql = "WHERE name='$foo'";
# There are three ' characters here, but only the middle one should be escaped
也就是说,您应停止使用an obsolete database API并选择支持modern replacement的prepared statements,这样您就无需在整个地方拨打real_escape_string
。
答案 1 :(得分:2)
正如其他人所指出的那样,使用准备好的陈述是最好的方法。但是如果你仍然希望继续前进,你可以这样做:
foreach($_POST as $key=>$value)
{
// this will take care of escaping all form elements
$$key = mysql_real_escape_string($value);
}
因此,如果您的表单包含名称为abc
,def
和ghi
的3个元素,则上述代码将创建名为$abc
的变量,{{1} }和$def
分别。
然后您可以像以前一样在查询中使用它们:
$ghi