3

此代码应该确保干净的代码进入数据库

它应该适用于早期版本的 PHP(早于 4.3.0)和更高版本的 php(早于 4.3.0)

它运行良好,因为数据可以毫无问题地进入数据库,但我在浏览器上遇到错误

$menu_name = mysql_prep($_POST['menu_name']);

是我如何调用 mysql_prep 函数

function mysql_prep($value)
{

    $get_magic_quotes = get_magic_quotes_gpc();

    $new_enough_php = function_exists ("mysql_real_escape_string");  //check if php version is greater than 4.3.0

    if($new_enough_php) // if php is of a newer version 
    {
        //undo magic quotes effect so that mysql_real_escape_string can work well
        if ($get_magic_quotes)
        {
            $value = stripslashes ($value);
        }

        $value = mysql_real_escape_string($value);

    }
    else //mysql is older than 4.3.0    
    {
        //add slashes manually if magic quotes are off
        if(!$get_magic_quotes)
        {
            $value = addslashes ($value);
        }
        //if magic quotes already exist, slashes already exists
    }

    return $value;

    //$value = mysql_real_escape_string($value);

    //$value_without_slashes = stripslashes ($value);

    //return $value_without_slashes;

}
4

2 回答 2

2

对于初学者,该函数可以缩短到大约 5 行(也更容易阅读)。

其次,当您调用该函数时,您是否连接到 MySQL?您必须连接 PHP 才能知道如何/如何逃脱。从手册中不是 100% 清楚mysql_real_escape_string,但暗示:

如果未指定链接标识符,mysql_connect()则假定打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像mysql_connect()在没有参数的情况下被调用一样。

如果仍然不能解决它,我建议在执行之前打印查询并检查一切是否正常。

于 2009-11-24T11:50:10.803 回答
0

您不应该在 DB 方法中执行此操作,如果您运行的是 PHP 5.3+,则可以将此代码放在页面的最顶部:

if (get_magic_quotes_gpc() === 1)
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}

它处理键、值和多维数组中的魔术引号。

于 2010-01-17T02:53:58.473 回答