3

mysql_real_escape_string()Laravel内で使用しようとすると、データベース接続エラーが発生します。Fluentクエリは正しく機能するため、データベースが正しく構成されていると思います。

mysql_real_escape_string()Laravelからどのように使用する必要がありますか?Fluentの制限のために自分で作成する必要があるSQLクエリの値をエスケープするために使用しています。

独自のSQLクエリを作成するPHPコード

    foreach($listings as $listing) {
        $listing = get_object_vars($listing);
        $query = 'INSERT IGNORE into archive ';
        $query .= '(' . implode(',', array_keys($listing)) . ') ';
        $query .= 'VALUES(' . implode(',', array_values( array_map('mysql_real_escape_string', $listing) )) . ')';
        DB::query($query);
    }

エラー

mysql_real_escape_string() [function.mysql-real-escape-string]: 
Access denied for user 'nobody'@'localhost' (using password: NO)
4

4 に答える 4

16

DB::connection()->getPdo()->quote()代わりに使用してください。

于 2014-01-07T10:43:29.823 に答える
5

mysql_real_escapes_string()で作成されたデータベースリンクを使用するmysql_connect()ため、を呼び出した後でのみ使用できますmysql_connect()

これに関する重要な注意(コメントから):

..ただし、PDOが選択されたデータベースドライバーである環境では使用しないでください。実際、mysql_connect()はもう使用しないでください。–ロビンv。G。

于 2012-09-27T14:02:24.117 に答える
5

これに対する私の解決策:

  1. app / lib/helpers.phpにカスタムヘルパーファイルを作成します
  2. これをcomposer.jsonのautoloadに追加します。

    "files": [
        "app/lib/helpers.php"
    ],
    
  3. この関数を追加します(php.netにあります)

    if ( !function_exists('mysql_escape'))
    {
        function mysql_escape($inp)
        { 
            if(is_array($inp)) return array_map(__METHOD__, $inp);
    
            if(!empty($inp) && is_string($inp)) { 
                return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp); 
            } 
    
            return $inp; 
        }
    }
    
  4. php artisan dump-autoload

これで、コード内のどこでもmysql_escapeを使用できます。

于 2013-05-09T22:22:02.703 に答える
3

LaravelはPDOを使用しているため、エスケープすることはなく、ステートメントを準備するだけです。データベースに関するLaravelのマニュアルを参照してください。

于 2012-09-27T14:01:09.747 に答える