整个$ _REQUEST数组的mysql_real_escape_string(),还是需要遍历它?

ajo*_*ajo 2 php mysql mysql-real-escape-string

有没有更简单的方法来安全地提取除以下之外的提交变量?

if(isset($_REQUEST['kkld'])) $kkld=mysql_real_escape_string($_REQUEST['kkld']);
if(isset($_REQUEST['info'])) $info=mysql_real_escape_string($_REQUEST['info']);
if(isset($_REQUEST['freq'])) $freq=mysql_real_escape_string($_REQUEST['freq']);
Run Code Online (Sandbox Code Playgroud)

(而且:你会isset()在这种情况下使用吗?)

dec*_*eze 28

要一次性逃避所有变量:

$escapedGet = array_map('mysql_real_escape_string', $_GET);
Run Code Online (Sandbox Code Playgroud)

要将所有变量提取到当前命名空间(即$foo = $_GET['foo']):

extract($escapedGet);
Run Code Online (Sandbox Code Playgroud)

不过请不要这样做.没有必要,只需将值保留在数组中即可.提取变量可能导致名称冲突和覆盖现有变量,这不仅是一个麻烦和错误的来源,而且还有安全风险.另外,正如@BoltClock所说,坚持$_GET$_POST.另外,正如@zerkms指出的那样,mysql_real_escaping在数据库查询中不应该使用的变量没有任何意义,它甚至可能导致进一步的问题.


需要注意的是真的没有的,这是一个特别好的主意可言,你只是转世magic_quotes的和global_vars,这是从过去的青睐PHP可怕的做法.通过mysqli或PDO使用带有绑定参数的预准备语句,并通过$_GET或使用值filter_input.见http://www.phptherightway.com.