いつもお世話になってばかりで恐縮ですがまたお願い致します。
ある条件文を作ったのですが完璧な動きをしないので
ソースをご覧の上でご指摘お願いします。
【ソース】
<?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の時にはエラーになります。
コーディングのミスに気付いていないのか、
もしくは構文そのものに間違いがあるのか
自分ではわかりません。
どなたかご指摘お願いします。
宜しくお願いします。
No.1
- 回答日時:
$sql に追加するところすべてにいえますが、
「$sql .= "itu_id = $itu_id ";」の$itu_id や $dou_id を
「$sql .= "itu_id = '".$itu_id."' ";」
としてみてはいかがでしょうか。
(シングルクォーテーションで囲む)
ご回答ありがとうございます。
ご指摘のとおり試してみましたが変りませんでした。
しかしクォーテーションは私が苦手としているところなので
コーディングにミスがあるのかもしれません。
もう少し試行錯誤してみます。
No.2ベストアンサー
- 回答日時:
条件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);
}
この回答への補足
丁寧なご回答ありがとうございます。
ググったどのページよりもスマートなコーディングだと
感じました。ただ残念ながら試しにコピペで置き換えてみたところ
今度は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 );
度々ご回答ありがとうございます。
全角スペースとは・・・
自分では一生気づけなかったことでしょう。
しかしながら今度は$itu_id・$doko_id・$dou_idの
全てが0のときしか正常に表示されなくなってしまいました。
ただ、これ以上はご迷惑かと思うのでひとまずクローズしたいと思います。
しかし、join関数を使うところはスマートなコーディングを目指す上で非常に勉強になりました。
ありがとうございました。
No.3
- 回答日時:
#2です。
コピーペーストした上、29行目でエラーが出るという事ですので、全角スペースが問題なのではないかと思います。
#2で示したサンプルソースのインデントは教えてgoo用に全角スペースになっています。
同様にインデント部分(32・35行目)も確認してみて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Q&Aサイトを作成していてURLの...
-
データベースに存在するデータ...
-
MySQLへの接続
-
MySQLのINSERT時にたまに重複に...
-
【初歩】配列の格納データ数だ...
-
INSERT,DELETEを同時に
-
mysqlの命令文をPDOに書き換...
-
JAVA SQLServerException 列名 ...
-
PHP+SQLite でSELECT文のWHERE...
-
トランザクション処理
-
エクセルVBAについて
-
SQL文の実行に失敗しました???
-
VBAをつかってクエリの情報を抽...
-
PHPでMY SQLの連想配列をリンク...
-
PHP + MySQLを使用して詳細画面...
-
MySQLでshal()関数のエラーがで...
-
SQL文2つ実行
-
SQL文が実行できません
-
エラーの意味と対策
-
PHP+mysqlでSQL文に文字数制限...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
Q&Aサイトを作成していてURLの...
-
<VB.NET>INSERT文でDBにデータ...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
ResultSetインターフェイスでの...
-
データベースに存在するデータ...
-
PHP&MySQLでの文字列+数列の一...
-
VBA ACCESS SQL...
-
phpで複数の検索語を検索対象に...
-
like検索の複数キーワードで、...
-
MySQLのINSERT時にたまに重複に...
-
C# で発生したException.Messag...
-
PHP+PDO+MYSQL で実行されたSQ...
-
PHPのUndefined index や varia...
-
INSERT,DELETEを同時に
-
配列をループさせてUPDATE
-
VB.NET エラーになる箇...
-
php postgres Insert と updat...
-
C#でDBの特定列をUpdate
おすすめ情報