2016-04-11 6 views
0

以下のクエリを発行する際に、私は1つの問題に直面しています。私は何が間違っているのか分かりません。空の値を持つmysql selectクエリ

$start= date("y-m-d", strtotime($start));   
$end= date("y-m-d", strtotime($end)); 
// $start = '2016-03-03'; 
// $end= '2016-04-04'; 
if($jobtitle == ''){ 
    $jobtitle = true; 
} 
if($start == '' or $end == ''){ 
    $start = true; 
    $end = true; 
} 
$result = $mysqli->prepare("SELECT * 
          FROM postdata 
          where id = ? 
           and title = ? 
           and (date between ? and ?) 
          order by date desc"); 

$result ->bind_param("isss", $id, $title, $start, $end); 
$result->execute(); 

実際に私は3つのフィールドを持つフォームを持っています。 1タイトルなど2は日付の開始と終了です。

タイトルに値を入力するか、フォームに開始日と終了日を入力します。ユーザーは両方のフィールドに値を入力することもできます。データがユーザによって提出されたら、データベースで検索を実行したい。

なぜ私のクエリが機能していないかアドバイスしてください。

+0

簡単なコードのインデントは、**、それはまた、はるかに簡単になり – RiggsFolly

+0

'の=をデバッグを読み取るためのコードが容易になりassignment'で、' ==もしくは=== '平等のテストだけではなく。 – RiggsFolly

+0

'title = '%%''は、 'title'列の内容は' %% 'と' %%'のみを含んでいなければなりません。あなたはLIKEを使用しておらず、それは '%'文字に応答する唯一の構文です – RiggsFolly

答えて

1

条件は、それが解決される場合には、私は3つの別々の選択クエリを作成したがなければなりません問題。 ここに私が今使っているコードがあります。

if($title != '' and $_POST['start'] == '' and $_POST['end'] == ''){ 
     $result = $mysqli->prepare("SELECT * FROM posting where id = ? and title like ? order by date desc"); 
     $result ->bind_param("is", $id, $title); 
} 
if($title == '' and $_POST['start'] != '' and $_POST['end'] != ''){ 
     $result = $mysqli->prepare("SELECT * FROM posting where id = ? and (date between ? and ?) order by date desc"); 
     $result ->bind_param("iss", $id, $start, $end); 
      } 
if($title != '' and $_POST['start'] != '' and $_POST['end'] != ''){ 
     $result = $mysqli->prepare("SELECT * FROM posting where id = ? and title like ? and (date between ? and ?) order by date desc"); 
     $result ->bind_param("isss", $id, $title, $start, $end); 
      } 
1

あなたは単にあなたのIF文でこれらの変数を再結合し

if($start = '' or $end = '') 

ブールのようなオペレータ===または==

+0

「==」 – RiggsFolly

+0

Applogiesの正しい使用法でさえ見ても、その全体のIFはちょっとナンセンスですが、=はタイプミスです。私はすでに==を試みましたが、データを返していません。 – Ironic

+0

同意します。 date()関数は空の文字列を返しません。チェックは変換の前に行う必要があります。しかし、IF文で '='を使用すると、それはまったくありません:) –

関連する問題