
SQLを使って、「名前」(カラム名=name)と「コメント」(カラム名=comment)のテーブルを作りました。
このテーブルに対して、検索フォームを作りました。
このフォームに名前を入力すると、該当する行が検索されるようにしました。
◆入力フォーム form.php
<form action = "kensaku.php" method="post">
名前:<input type="text" name="name">
<input type="submit" name="submit" value="検索">
</form>
◆検索結果 search.php
<?php
function connect() {
return new PDO("mysql:dbname=★;host=★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' ");
$address = $st->fetchAll();
?>
<?php foreach ($table as $g) { ?>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 14.0.8.0 for Windows">
<p>名前<?php echo $g['name'] ?></p>
<p>コメント<?php echo $g['comment'] ?></p>
<?php } ?>
ここで、該当する文言の一部でも検索できるようにしたいです。
※例えば、「山田太郎」を検索する場合に「山」だけでも検索できるように。
LIKEを使えばよいかと思い、
$st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' ");を
$st = $pdo->query("SELECT * FROM table WHERE name LIKE='%" . $_POST["name"] . "%' ");
と、記述してみましたがだめでした。
どのように記述すればよいか教えていただけないでしょうか。
何卒お願いします。
No.2ベストアンサー
- 回答日時:
>ご指摘の通りに書き換えましたが、検索できませんでした。
一番高い可能性としては、POSTされたデータのキャラクターコードと
DBに格納されたキャラクターコードが異なるということです
この手のテストをする場合はキャラクターコードでの差異が出づらい
「英数字のみ」でまずテストをすることをお勧めします。
ここで動作確認ができたら次の段階として日本語検索を試してください
プリペアドステートメントについてはphpマニュアルなどご一読ください
http://www.php.net//manual/ja/pdo.prepared-state …
ありがとうございました!
いろいろいじっていたら、動きました。
プリペアドステートメントについても参考サイトを教えていただき本当にありがとうございました。
まだまだ意味もよくわからずにとにかく作っている状況です。
今後も勉強していきますので、また機会がありましたらよろしくお願いします。
No.1
- 回答日時:
>name LIKE='%" . $_POST["name"] . "%' "
だと
name LIKE='%山%'
になっちゃいますね
イコールをとって、
name LIKE '%" . $_POST["name"] . "%' "
にしてください。
ちなみにPOSTされてきたデータをそのままSQLに組み込むのはNGです
PDOをつかっているならプリペアド処理をしてください
ご回答ありがとうございました。
ご指摘の通りに書き換えましたが、検索できませんでした。
(結果が空白になってしまいます。)
当方、SQLの初心者で、「プリペアド処理」という言葉もはじめて知りました。
何か根本的にやり方が間違っているのでしょうか。
時間をかけて勉強するつもりですが、もし、他にヒントになるようなことがありましたら、教えていただければと思います。
お手数をおかけして申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初心者Mysqlの関数のsubstring...
-
sum()の出力結果順に並び替えを...
-
Update文の書き方について
-
OracleのSQL*PLUSで、デー...
-
GROUP BYを行った後に結合した...
-
ADO VBA 実行時エラー3021
-
Oracleでの文字列連結サイズの上限
-
実績累計の求め方と意味を教え...
-
ワードの差込印刷で教えて下さ...
-
最新の日付とその金額をクエリ...
-
決定性有限オートマトン
-
Accessで別テーブルの値をフォ...
-
JSPのNULLレコード表示について...
-
GROUP BYを使ったSELECT文の総...
-
Access:抽出して、色をつけたい。
-
データセットのレコード更新が...
-
Excelでセルの書式設定を使用し...
-
関係演算子が無効です。
-
VB6.0のIsNull関数に相当するもの
-
SET句内で複数の条件を指定して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
使うべきでない文字。
-
【初歩】ラジオボタンをつかっ...
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
チェックボックスの項目をDBにi...
-
割合(パーセント)を求めるに...
-
SQLの集計で「全て」の合計も表...
-
表示幅を短くしたい
-
ビット演算
-
検索機能で条件を指定しない場...
-
月別、販売員別の集計がわかり...
-
Update文の書き方について
-
UNIONについて
-
[初心者]A表の2つの値からB表...
-
MySQLのクエリについて
-
今週の日曜日から土曜日までの...
-
初心者Mysqlの関数のsubstring...
-
カウント結果を1レコードの中...
おすすめ情報