- ベストアンサー
where以下の条件文
いつもお世話になってばかりで恐縮ですがまたお願い致します。 ある条件文を作ったのですが完璧な動きをしないので ソースをご覧の上でご指摘お願いします。 【ソース】 <?php //SQL発行 $sql = "SELECT * FROM data2 WHERE "; //条件1 if($itu_id == 0){ $sql .=""; } if($itu_id !== 0){ $sql .= "itu_id = $itu_id "; } //条件2 if($doko_id == 0){ $sql .=""; } if($doko_id !== 0){ $sql .=" && doko_id = $doko_id "; } //条件3 if($dou_id == 0){ $sql .=""; } if($dou_id !== 0){ $sql .=" && dou_id = $dou_id "; } //条件4 if($nani_id == 0){ $sql .=""; } ------- 「条件1が0以外なら条件を追加して条件2へ」 「条件1が0だったらスルーして条件2へ」とう言うフローの つもりです。今のところ0以外では正常に動いてくれます。条件が0の時にはエラーになります。 コーディングのミスに気付いていないのか、 もしくは構文そのものに間違いがあるのか 自分ではわかりません。 どなたかご指摘お願いします。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
条件1が0で、条件2が0以外の時を考えると $sql = "SELECT * FROM data2 WHERE && doko_id = $doko_id " となってしまう事がエラーの原因でしょう。(条件がすべて0以外ならSQLがWHEREで終わってしまいますし) 以下の感じでどうでしょう? 追加するSQLを保存する配列$conditionを準備し、条件が0以外ならSQLを追加します。 $conditionの個数が0以上なら" WHERE "と$conditionを" && "で繋げた文字列を追加します。 $sql = "SELECT * FROM data2"; $condition = array(); if($itu_id != 0){ $condition[] = "itu_id = $itu_id"; } if($doko_id != 0){ $condition[] = "doko_id = $doko_id"; } if($dou_id != 0){ $condition[] = "dou_id = $dou_id"; } if(count($condition) > 0){ $sql = " WHERE ".join(" && ",$condition); }
その他の回答 (2)
- trisagion
- ベストアンサー率68% (15/22)
#2です。 コピーペーストした上、29行目でエラーが出るという事ですので、全角スペースが問題なのではないかと思います。 #2で示したサンプルソースのインデントは教えてgoo用に全角スペースになっています。 同様にインデント部分(32・35行目)も確認してみて下さい。
- TNY
- ベストアンサー率42% (69/163)
$sql に追加するところすべてにいえますが、 「$sql .= "itu_id = $itu_id ";」の$itu_id や $dou_id を 「$sql .= "itu_id = '".$itu_id."' ";」 としてみてはいかがでしょうか。 (シングルクォーテーションで囲む)
お礼
ご回答ありがとうございます。 ご指摘のとおり試してみましたが変りませんでした。 しかしクォーテーションは私が苦手としているところなので コーディングにミスがあるのかもしれません。 もう少し試行錯誤してみます。
お礼
度々ご回答ありがとうございます。 全角スペースとは・・・ 自分では一生気づけなかったことでしょう。 しかしながら今度は$itu_id・$doko_id・$dou_idの 全てが0のときしか正常に表示されなくなってしまいました。 ただ、これ以上はご迷惑かと思うのでひとまずクローズしたいと思います。 しかし、join関数を使うところはスマートなコーディングを目指す上で非常に勉強になりました。 ありがとうございました。
補足
丁寧なご回答ありがとうございます。 ググったどのページよりもスマートなコーディングだと 感じました。ただ残念ながら試しにコピペで置き換えてみたところ 今度は0以外でもエラーを返すようになってしまいました。 内容は「Parse error: parse error, unexpected T_VARIABLE in 」です。 どうやら29行目にセミコロンが抜けているとのことですが、 いくら探してもみつかりません。 ソースはコピペさせていただいたので間違いはないと思うんですが、 私の勘違いかもしれないのでお手数をおかけしますが念のため 何かないか見ていただけないでしょうか。 【ソース】 <?php //フォーム送信内容を取得 $itu_id = 1 ; $doko_id = 1 ; //MySQLに接続 if( ! $conn = mysql_connect( 'localhost', 'card', 'UQbVGauchEoQ') ){ die( 'MySQL接続失敗' ); } //データベースの選択 mysql_select_db( 'card', $conn ); //ヘッダ出力をします header('Content-Type: text/html; charset=euc-jp'); ?> <HTML> <HEAD> <TITLE>mysql関数テスト1</TITLE> </HEAD> <BODY> <?php //SQL発行 $sql = "SELECT * FROM data2 "; $condition = array(); if($itu_id != 0){ $condition[] = "itu_id = $itu_id "; } if($doko_id != 0){ $condition[] = "doko_id = $doko_id "; } if(count($condition) != 0){ $sql = " WHERE ".join(" && ",$condition); } $rs = mysql_query( $sql , $conn );