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で質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
割合(パーセント)を求めるに...
-
使うべきでない文字。
-
サブクエリ内で INNER JOIN は
-
LIKE述語/SQLとPHPを使った検...
-
MySQLで MAX()とGROUP BYを使う...
-
SQLの集計で「全て」の合計も表...
-
カウント結果を1レコードの中...
-
MySQL のデータからドロップダ...
-
sum()の出力結果順に並び替えを...
-
何にかが違うから エラーなんで...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
-
レコードが存在しなかった場合
-
GROUP BYを使ったSELECT文の総...
-
OracleのSQL*PLUSで、デー...
-
アクセスでレポートの1印刷内...
-
Accessで別テーブルの値をフォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
【MYSQL】asでリネームしてwher...
-
sum()の出力結果順に並び替えを...
-
初心者Mysqlの関数のsubstring...
-
SQLの集計で「全て」の合計も表...
-
割合(パーセント)を求めるに...
-
MySQL のデータからドロップダ...
-
チェックボックスの項目をDBにi...
-
【初歩】ラジオボタンをつかっ...
-
MySQLで MAX()とGROUP BYを使う...
-
カウント結果を1レコードの中...
-
phpmyadminはトリガーやIF文を...
-
月別、販売員別の集計がわかり...
-
replaceした上でwhere
-
今週の日曜日から土曜日までの...
-
サブクエリ内で INNER JOIN は
-
複数の表の条件でのDELETE文
-
姓名の前後を入れ替えるSQL命令...
-
mySQLでグループ別の順位を入力
おすすめ情報