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メソッド内でこれを行うべきではありません。PHP5.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 に答える