プロが教えるわが家の防犯対策術!

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"] . "%' ");
と、記述してみましたがだめでした。

どのように記述すればよいか教えていただけないでしょうか。
何卒お願いします。

A 回答 (2件)

>ご指摘の通りに書き換えましたが、検索できませんでした。



一番高い可能性としては、POSTされたデータのキャラクターコードと
DBに格納されたキャラクターコードが異なるということです

この手のテストをする場合はキャラクターコードでの差異が出づらい
「英数字のみ」でまずテストをすることをお勧めします。
ここで動作確認ができたら次の段階として日本語検索を試してください

プリペアドステートメントについてはphpマニュアルなどご一読ください

http://www.php.net//manual/ja/pdo.prepared-state …
    • good
    • 0
この回答へのお礼

ありがとうございました!
いろいろいじっていたら、動きました。

プリペアドステートメントについても参考サイトを教えていただき本当にありがとうございました。

まだまだ意味もよくわからずにとにかく作っている状況です。
今後も勉強していきますので、また機会がありましたらよろしくお願いします。

お礼日時:2014/06/10 13:59

>name LIKE='%" . $_POST["name"] . "%' "



だと

name LIKE='%山%'

になっちゃいますね
イコールをとって、

name LIKE '%" . $_POST["name"] . "%' "

にしてください。

ちなみにPOSTされてきたデータをそのままSQLに組み込むのはNGです
PDOをつかっているならプリペアド処理をしてください
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
ご指摘の通りに書き換えましたが、検索できませんでした。
(結果が空白になってしまいます。)

当方、SQLの初心者で、「プリペアド処理」という言葉もはじめて知りました。
何か根本的にやり方が間違っているのでしょうか。
時間をかけて勉強するつもりですが、もし、他にヒントになるようなことがありましたら、教えていただければと思います。

お手数をおかけして申し訳ありませんでした。

お礼日時:2014/06/10 11:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!