2017-04-11 8 views
0

私はこのクエリをパラメータpromのhttp $_POSTとし、それが機能していません。誰にでも間違っていることを教えてくれますか?このクエリで何が問題なのかを誰にでも教えてください

if ($category != 'All' && $status !='All' && $name !='All'){ 
       $query = "SELECT " .$select." FROM afro_fixed_asset WHERE fixed_asset_category = '".$category."'AND fixed_asset_status= '".$status."' AND fixed_asset_acquisition_date BETWEEN '".$acquisition_from."' AND '".$acquisition_to."'"."' AND fixed_asset_registered_date BETWEEN '".$registration_from."' AND '".$registration_to."'"; 
       } 

エラーが

SELECT fixed_asset_id,fixed_asset_name,fixed_asset_category,fixed_asset_status FROM afro_fixed_asset WHERE fixed_asset_status = 'Operational (In use)' AND fixed_asset_category= 'Computer & Computer Accessory'AND fixed_asset_name= 'Bur Cutter' AND fixed_asset_acquisition_date BETWEEN '03/26/2017' AND '03/27/2017'' AND fixed_asset_registered_date BETWEEN '04/12/2017'' AND '04/03/2017' 

Status 7 - ERROR: syntax error at or near "04" LINE 1: ...7/2017'' AND fixed_asset_registered_date BETWEEN '04/12/2017...^
+0

@TimBiegeleisenの場合、構文エラーが発生しますか? –

+0

いいえ。これは、これ以外の同じ日付形式の他のクエリで正常に動作します。問題は構文であり、私はそれを理解することはできません。 –

+0

@BartFriederichsいいえ、構文エラーは発生しないかもしれませんが、 'BETWEEN'節は機能しません。 –

答えて

0

正しいクエリ

$query = "SELECT " .$select." FROM afro_fixed_asset WHERE fixed_asset_status = '".$status."' AND fixed_asset_category= '".$category."' AND fixed_asset_name= '".$name."' AND fixed_asset_acquisition_date BETWEEN '".$acquisition_from."' AND '".$acquisition_to."' AND fixed_asset_registered_date BETWEEN '".$registration_from."' AND '".$registration_to."'"; 
+0

Thanx Man。ちょうど私が好きなように。 –

0

まず第一に言う、prepared statementsを使用しています。これでこの問題は修正されます。

第二に、あなたの問題はここにある:

... AND '".$acquisition_to."'"."' ... 

あなたはこのように表示するために2つの'文字、編集を追加します。

... AND '".$acquisition_to."' ... 
+0

@TimBiegeleisenおそらく、それは問題ではありません。 –

+0

それでは、それは直接の質問ではないので、なぜあなたは準備文を提案しましたか? –

+0

@TimBiegeleisen 1、日付形式は受け入れられます:https://www.postgresql.org/docs/9.1/static/datatype-datetime.html#DATATYPE-DATETIME-DATE-TABLE、2つはプリペアドステートメントを使用するとより効果的です実際に問題を解決するにはどうすればいいですか? –

0

ソリューションは非常に簡単です、あなたはあまり1 'を持っています最後のクエリ:

SELECT fixed_asset_id,fixed_asset_name,fixed_asset_category,fixed_asset_status 
FROM afro_fixed_asset 
WHERE fixed_asset_status = 'Operational (In use)' 
AND fixed_asset_category= 'Computer & Computer Accessory' 
AND fixed_asset_name= 'Bur Cutter' 
AND fixed_asset_acquisition_date BETWEEN '03/26/2017' 
AND '03/27/2017'' // Error here, one ' too much 
AND fixed_asset_registered_date BETWEEN '04/12/2017'' AND '04/03/2017' 
0

あなたが前に余分なSIGLEの引用'".$registration_from."'"."' AND "を持っているとUは"'"を見ることができますし、すでに$registration_fromで単一引用符をconcate。削除するとクエリがうまく動作します。

関連する問題