phpで検索結果画面の制作を勉強中です。
pdoでmysqlデータベースに接続しています。
現在、検索フォームの作成を勉強中です。
検索用のフォームに入力された文字に類似しているという条件(あいまい検索)のもと、
添付画像の上のようなデータベーステーブル内をSELECT COUNTし、
添付画像の下のように、検索に該当するそれぞれのカラムのデータと、そのデータがいくつ存在しているのかを表示させたいです。
SELECT COUNTでGROUP BYを使用すれば結果が取得できると教えていただき、以下のようなphpを記述しました。
//フォームに入力されたテキストをGETで渡し、プログラムで取得し、あいまい検索に対応させる。
$search = '%'.$_GET['search'].'%';
//現在表示している結果表示ページのページ数をURLから取得
$page = $_GET['page'];
//SQLのLIMIT句用にデータのいくつめから取得するか$limitに入れる
$limit = ($page-1) * 20;
//該当するものをグループ化し、それぞれのデータ数をカウントする
try{
$stmt=$db->prepare('SELECT COUNT 【住所】 FROM 【顧客情報】 WHERE search like :search GROUP BY 【住所】 LIMIT :limit , 20');
$stmt->bindValue(':search',$search,PDO::PARAM_STR);
$stmt->bindValue(':limit',$limit,PDO::PARAM_INT);
$stmt->execute();
}catch(PDOException $e){
$error = "エラー:".$e->getMessage();
}
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
print $row['【住所】'];
}
※検索フォームのタグは省略しています。
※データベース接続は$dbで行っています。
※該当したデータを1ページにつき、20件ずつ表示したいのでLIMIT句を使用しています。
実行したところ、結果はおろか、エラーも何も表示されませんでした。
個人的にはSQL文に間違えがあるというよりも、
while文以降で取得したデータの表示ができていないのではないかと思いますが、
「SELECT COUNT」の結果表示の方法をネットで調べても
答えになるものが中々見つかりませんでした。
また、添付画像の下のように、
取得したデータ名とそのデータの件数を一緒に表示するプログラムが理想なので、
どなたかご教授頂けると有難いです。
ご回答、よろしくお願いします。
※ちなみに、正規化については理解しておりますが、今回は例示として住所を使用しました。
No.3ベストアンサー
- 回答日時:
>結果はおろか、エラーも何も表示されませんでした。
PDOのエラーモードはどうされていますか?デフォルトはPDO::ERRMODE_SILENTです。
http://www.php.net/manual/ja/pdo.error-handling. …
PDO::ERRMODE_EXCEPTIONにしたければ、コンストラクタのoptionで指定するか、setAttributeで設定しないといけません。
ちょっと見た限りではSQL文がヘンです
$stmt=$db->prepare('SELECT 【住所】, COUNT(*) as CNT FROM 【顧客情報】 WHERE search like :search GROUP BY 【住所】 LIMIT :limit , 20');
ではないですかねぇ。
(蛇足)
$search = '%'.$_GET['search'].'%';
の部分も
$search = '%' . addcslashes($GET['search'], '\\_%') . '%'
であるべき(likeで意味をもつ文字はエスケープする)。
ご回答ありがとうございます!
エラーモードがデフォルトでサイレントになっているのを知りませんでした。
おかげさまで、エラーが出る様になったのでこれからの勉強が少し楽になります。
SQL文のご訂正もありがとうございます!
仰られたとおりに書き直してみたところ、ちゃんと結果が表示されるようになりました!
また、addcslashes()でエスケープする旨まで教えてくださり
、ありがとうございます。
No.2
- 回答日時:
>$stmt=$db->prepare('SELECT COUNT 【住所】 FROM 【顧客情報】 WHERE search like :search GROUP BY 【住所】 LIMIT :limit , 20');
なんかSQL文自体が変じゃない?せめて、
SELECT 【住所】,COUNT(*) AS COUNT FROM 【顧客情報】 WHERE search like :search GROUP BY 【住所】 LIMIT :limit ,20
的な?
ちなみに
$pdo = new PDO($dsn, $user,$password);
したら
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
をしないと文法エラーなどは拾えません。
ご回答ありがとうございます!
色々関数を用いてしまうとどうしてもSQL文をどのように書けばいいのかわからなくなってしまい、変なSQL文になってしまいました・・・
文法エラーの拾い方も教えてくださり、ありがとうございます!
No.1
- 回答日時:
>個人的にはSQL文に間違えがあるというよりも
sql単体で試したほうが良いと思うけど。
select count ADDRESS from ...
だとしたら構文ミス。
select count(ADDRESS) from ...
じゃないと。
まずはSQLがきちんと実行されているか確かめないとダメ。
んで、住所と件数を並べたいなら
select ADDRESS,count(ADDRESS) from ... group by ADDRESS limit 0,20
ご回答ありがとうございます!
SQL単体では何度か試してみたのですがうまく実行できず、且つ、どこがエラーになっているのかわからなかったため、間違った構文になってしまいました。
COUNTの後に()が必要なのですね!教えてくださり、ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAをつかってクエリの情報を抽...
-
実行時エラー3131 FROM 句の構...
-
テキストボックスに入れた内容...
-
LocalのNotesメールDBをVBAで参...
-
SELECT COUNTで取得した結果の表示
-
エラー3011
-
ExcelからAccessのクエリを呼び...
-
in 'where clause'のエラーの理由
-
SQL文の実行に失敗しました???
-
エクセルVBAについて
-
MySQLでデータベースにデータin...
-
円マークが付加されて保存され...
-
VBA ACCESS SQL...
-
DBで検索結果に該当するデータ...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
phpにて出欠登録管理を作成して...
-
phpのエラーについてです
-
sortable ギブアップです…助け...
-
php データ削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
SQL文が実行できません
-
エラー3011
-
LocalのNotesメールDBをVBAで参...
-
in 'where clause'のエラーの理由
-
codeigniter 複数モデルでトラ...
-
PEAR でprepareメソッドがエラーに
-
SELECT文を発行して、ACCESSよ...
-
PHP5でpostgresqlのデータベー...
-
PHP(PDO)でDBの情報を完全一...
-
PDOで取得される値がすべて文字...
-
VB.NET
-
データフォームウィザードで追...
-
Accessのテーブルへ複数の主キ...
-
VBSの中で書くSQL文の記...
-
ExcelVBAでAccessのデータを検...
-
SELECT COUNTで取得した結果の表示
-
SQL文の実行に失敗しました???
おすすめ情報