
phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか?
以下記述↓
<?
$link = db_con(); //←DB接続
$sql = "select * from tbl where
id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and
name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' ";
$result = mysql_query( $sql ) ;
$num_rows = mysql_num_rows( $result );
?>
ここまで↑
を下記のように『where』以下を$変数にして代入
$変数した場合↓
<?
$where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' ";
$link = db_con(); //←DB接続
$sql = "select * from tbl where $where ";
$result = mysql_query( $sql ) ;
$num_rows = mysql_num_rows( $result );
?>
ここまで↑
どなたかご指摘をお願いします。
No.1ベストアンサー
- 回答日時:
とりあえず
$result = mysql_query($sql) or die('Query failed: ' . mysql_error() . ":sql=>" . $sql);
などとして「エラー内容」と「そのときに生成されたSQL文」を確認してください。
>$where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' ";
$where .= ($whereに追加)ということですが、最初の$whereの状態はどうなっているんでしょう?
$where = "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' ";
と書きたかったのでしょうか?
この回答への補足
ご指摘有難うございます。
よく、参考にさせて頂いております。
>$result = mysql_query($sql) or die('Query failed: ' . mysql_error() . ":sql=>" . $sql);
を記述してもエラー表示がされず、
検索結果は0件です。という表示がでていたのみでした...。
>$where .= ($whereに追加)ということですが・・・
『$where .= 』と『$where =』の意味の違いを理解していませんでした。ご指摘頂いた通り
>$where = "id = '" . mysql ・・・
の意味です。
ご指摘頂きやすいように具体的に掲示致します。
複数条件検索 ※0の場合 → 全件表示
※合致の場合 → 抽出結果表示
以下のように記述するのかな?と考えてやってみたのですが
動作しません。
--<sch.php>--
<?
$link = db_connect();
?>
<? require( './head.php' ) ?>
<div align="center">
<h2>検索</h2>
<br>
<form action="res.php" method="get">
<br>ID<input type="text" name="id" size=16 maxlength=16>
<br>名<input type="text" name="name" size=64 maxlength=64>
<br>
<input type="submit" value="検索">
<input type="reset" value="リセット">
</form>
</div>
<? require( './footer.php' ) ?>
?>
--<sch.php>--
--<res.php>--
if ( (!empty($_GET['id'] ) && (!empty($_GET['name']) ) {
$where = "1";
}else{
$where = "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; //←修正しました
}
$link = db_con(); //←DB接続
$sql = "select * from tbl where $where ";
$result = mysql_query( $sql ) or die('Query failed: ' . mysql_error() . ":sql=>" . $sql);
$num_rows = mysql_num_rows( $result );
$sql = "select * from tbl where $where order by id desc limit ${_GET['page']}, ${_GET['rows']} ";
$result = mysql_query( $sql ) or die('Query failed: ' . mysql_error() . ":sql=>" . $sql) ;
----<res.php>--
根本的に理解していないのでしょうか...。
ご指摘の程、宜しくお願い申し上げます。
No.3
- 回答日時:
>if ( (!empty($_GET['id'] ) && (!empty($_GET['name']) ) {
>$where = "1";
>}else{
>$where = "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; //←修正しました
>}
$where = "1"; と条件セットと逆?
最初の投稿では「$whereを変数にすると動作しない」ということでしたよね?そうであれば、両方の$sqlを比較すれば違いが必ずあるハズです。
No.2のようにSQL文をprintして違いがないかチェックしてください。
(蛇足)
idの一致だけで一意に決まると思うので、nameまでlikeで条件になっているのでちょっと不安なのですが(idが他のテーブルとの結合用ならいいのですが・・)抽出件数が「存在する」SQLですよね?nameが日本語だとちょっとアレですが(汗
この回答への補足
始めて3日程度なもので調べながらやっているので遅くなりました。
まだできていませんが...(汗(汗(汗
>$where = "1"; と条件セットと逆?
↑これはどういう意味でしょうか?
>No.2のようにSQL文をprint・・・
知らないことなので調べながらやってます...(汗
>idの一致だけで・・・
テスト的にやっているのでidでやっていました。
実際はidを除く3項目(住所、年齢、性別)の条件検索です。
idでテストすると何か問題がありますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
エラー 1068 (42000): 複数の主...
-
あるカラムの値を複数持つレコ...
-
WordpressのContact form 7でzi...
-
2つのテーブルを繋げて条件をつ...
-
sqlで、600行あるテーブルを100...
-
テーブル名を省略して「h.id」...
-
複数テーブルのGROUP BY の使い...
-
【Transact-sql】 execの結果を...
-
select文のwhere句に配列を入れ...
-
insertを高速化させたい
-
クエリ表示と、ADOで抽出したレ...
-
複数DBテーブルからのデータ取得
-
VIEWの元のテーブルのindexって...
-
Access パラメータクエリをcsv...
-
深い人、浅い人の判断
-
【Excel+MySQL】select文で返っ...
-
AUTO_INCREMENTのあるテーブル...
-
SELECT句の指定フィールドに固...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLにて特定の文字を除いた検索...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
WordpressのContact form 7でzi...
-
クエリ表示と、ADOで抽出したレ...
-
SQLサーバから、項目の属性(型...
-
selectした大量データをinsert...
-
Access パラメータクエリをcsv...
-
副問合せの書き方について
-
inner joinをすると数がおかし...
-
insertを高速化させたい
-
[MySQL] 3つのテーブルの結合で...
おすすめ情報