34

Laravel 4で生のクエリに渡されたパラメータをエスケープするにはどうすればよいですか? DB::escape()私は(Laravel 3からベルを鳴らす)のようなものを期待し、試みました(これはPDOオブジェクトDB::quote()を通じて利用できると思いました)

$query = DB::select("SELECT * FROM users WHERE users.id = " . DB::escape($userId));

上記は、達成しようとしていることの単純化された例にすぎないため、プレースホルダーで select メソッドを使用することはできません。クエリビルダーに適応できないいくつかのネストされた選択クエリを含む大きなカスタムクエリがあります。

Laravel 4に挿入する前に何かをエスケープする最良の方法は何ですか?

編集:

PDO オブジェクトにアクセスして、この方法で quote 関数を使用できることを発見しました。これはまだ最善のアプローチですか、それともこの機能にアクセスする簡単な方法はありますか?

DB::connection()->getPdo()->quote("string to quote");
4

7 に答える 7

23
$value = Input::get("userID");

$results = DB::select( DB::raw("SELECT * FROM users WHERE users.id = :value"), array(
   'value' => $value,
 ));

詳細はこちら

于 2013-09-23T02:49:56.053 に答える
11

これを試すこともできます(ドキュメントを読む

$results = DB::select('SELECT * FROM users WHERE users.id = ?', array($userId));
于 2013-09-23T02:54:29.493 に答える
5

DBここで使用する 2 つの回答は、ファサードに組み込まれている冗長性の低いソリューションです。

まず、値の引用:

// From linked answer
DB::connection()->getPdo()->quote("string to quote");
// In the DB facade
DB::getPdo()->quote('string to quote');

次に、識別子の引用(テーブル名と列名):

// From linked answer
DB::table('x')->getGrammar()->wrap('table.column');
// In the DB facade
DB::getQueryGrammar()->wrap('table.column');
于 2019-06-26T20:59:07.070 に答える
4

私はhelpers.phpLaravel 5でこれを使用しています:

if ( ! function_exists('esc_sql'))
{
    function esc_sql($string)
    {
        return app('db')->getPdo()->quote($string);
    }
}

次にesc_sql、生の SQL クエリのエスケープを pergorm する必要がある関数を使用できます。

于 2015-06-08T20:41:26.983 に答える