2017-07-10 11 views
0

名前付きパラメータをすべてクエリーに含め、PDOドキュメントで指定された名前付きパラメータルールを処理しました。それでも私にエラーが出る、私はエラーを見つけることができませんでした。Laravel - 無効なパラメータ番号:パラメータが定義されていません[名前付きパラメータエラー]

$leaves = DB::select("SELECT * FROM leaves WHERE emp_id=:emp_id AND status != 'Rejected' AND ((STR_TO_DATE(from_date, '%Y-%m-%d') BETWEEN ':from_date1' AND ':to_date1') OR (STR_TO_DATE(to_date, '%Y-%m-%d') BETWEEN ':from_date2' AND ':to_date2')) OR ((STR_TO_DATE(from_date, '%Y-%m-%d') <= ':from_date3') AND (STR_TO_DATE(to_date, '%Y-%m-%d') >= ':to_date3'))", 
     [ 
     'emp_id'=> (int)$request->emp_id, 'from_date1'=>$request->from_date, 'to_date1'=>$request->to_date, 
     'from_date2'=>$request->from_date, 'to_date2'=>$request->to_date, 
     'from_date3'=>$request->from_date, 'to_date3'=>$request->to_date 
     ]); 

答えて

1

名前付きパラメータが間違っているようです。 PDO::prepareのドキュメントをチェックすると、'ではなく、パラメータ名を囲むです。代わりに、このクエリをお試しください:

$leaves = DB::select(
    "SELECT * 
    FROM leaves 
    WHERE emp_id=:emp_id AND status != 'Rejected' 
     AND (
      (STR_TO_DATE(from_date, '%Y-%m-%d') 
       BETWEEN :from_date1 AND :to_date1) 
      OR (STR_TO_DATE(to_date, '%Y-%m-%d') 
       BETWEEN :from_date2 AND :to_date2) 
     ) 
     OR (
      (STR_TO_DATE(from_date, '%Y-%m-%d') <= :from_date3) 
      AND (STR_TO_DATE(to_date, '%Y-%m-%d') >= :to_date3) 
     )", 
     [ 
     'emp_id'=> (int)$request->emp_id, 'from_date1'=>$request->from_date, 
     'to_date1'=>$request->to_date, 'from_date2'=>$request->from_date, 
     'to_date2'=>$request->to_date, 'from_date3'=>$request->from_date, 
     'to_date3'=>$request->to_date 
     ]); 

を基本的には、ドライバーがあなたのクエリの内部で実際のvarchar型の値を使用していることを信じているように、パラメータ名は、それを作るの周り'含みます。しかし、あなたのケースでは、置換を呼び出そうとしています。

+0

ありがとうございました。学んだ教訓 :) –

関連する問題