2017-02-10 11 views
2

を含めたときに作動していません考えると、次のコード:Laravel生の発現は、ワイルドカードパラメータ

$sql = "SELECT * FROM items WHERE name LIKE '%?%'"; 
$key = 'orange'; 
$result = \DB::select(\DB::raw($sql), [$key]); 

結果は常にはレコードではありません!

=LIKEを変更することで、それが正常に動作している間:

$sql = "SELECT * FROM items WHERE name = ?"; 

なぜこれが起こっている私にはわからないが、私は、このスクリプトでRAWを使用するを持っている。誰が問題がどこにあるのか把握できますか?あなたは、バインディングがどのように機能するかを理解するために失敗している

答えて

1

...バインディングは、値内の引用符や他の特殊文字を処理するだけでなく、引用

$sql = "SELECT * FROM items WHERE name LIKE ?"; 
$key = '%orange%'; 
$result = \DB::select(\DB::raw($sql), [$key]); 

を処理し、前$key値の周り%に注意してくださいだけでなく、あなたはそれをバインドします

+0

それは今作動します!ありがとうございました。 – William

+1

この場合、 'DB :: select'の中で' DB :: raw'を使う必要はありません。後者はすでにraw SQLを実行できるので、次のようにすることができます: 'DB :: select($ sql、[$ key]);' –

関連する問題