用于整个查询的php mysql real_escape_string

时间:2014-05-20 10:18:52

标签: php mysql

是否可以转义整个查询而不是每个搜索字段。例如,我知道我可以这样做:

$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)的加载......

这是否可行,任何人都可以解释我如何实现这个

提前致谢

2 个答案:

答案 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 replacementprepared 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);
}

因此,如果您的表单包含名称为abcdefghi的3个元素,则上述代码将创建名为$abc的变量,{{1} }和$def分别。

然后您可以像以前一样在查询中使用它们:

$ghi