real_escape all parameters的代码清除所有参数


Code to real_escape all parameters clears all parameters

我使用了这段PHP代码来转义我传递的所有参数:

<?php
foreach ($_GET as $key => $value) {
    if(!is_array($value)){
        $_GET[$key] = mysql_real_escape_string($value);
    }
}
$offset = (isset($_GET['offset']) ? $_GET['offset'] : null);
echo "Offset is " . $offset;
?>

在这个例子中,无论我传递什么作为"offset",它都会返回"offset is"。如果我删除foreach循环,它返回"Offset is Hello"(或者我传递的任何东西)。

为什么fornext循环失去了参数-我已经使用了几个月的代码,它以前一直工作!

代码正常运行:

<?php
$_GET['offset'] = 'Hello';
foreach ($_GET as $key => $value) {
    if(!is_array($value)){
        $_GET[$key] = mysql_real_escape_string($value);
    }
}
$offset = (isset($_GET['offset']) ? $_GET['offset'] : null);
echo "Offset is " . $offset;
?>
结果:

Deprecated: mysql_real_escape_string(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in ... on line 5
Offset is Hello

正如你所看到的值是正确的,所以可能在你的情况下,$_GET['offset']包含其他东西,你使用mysql_废弃的函数。

是的,愚蠢的我,我没有在我的脑海中把MySQL和解析参数联系起来。所有其他的代码,它的工作,我做一个连接到MySQL数据库首先。

谢谢。