現在、PHP(5.6)とmySQL(5.1)を利用して検索システムを作っています。
そこで、どうしても「完全一致」で値が表示されないので困っています。DBには5件の情報がありますが、これらが「すべて表示」されるか「該当なし」とでるか結果が両極端なのです。
kensaku.htmlで商品番号(数字7ケタ+アルファベット1ケタ/例:1111111A)を入力すると、検索した商品番号だけの情報が表示されるようにしたいのですが・・・。
下記にhtmlとphpのソースをコピペしますので、どの部分がおかしいのかご教示下さい。
ーkensaku.html部分ー
<body>
< form action="list.php" method="post">
商品番号:
<input type="text" name="pn" />
<input type="submit" value="検索" >
< /form>
< /body>
ーlist.php部分ー
<?php
$db_user = ユーザー名
$db_pass = パスワード
$db_host = ホスト名
$db_name = データベース名
$db_type = データベースの種類(mysql)
$dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";
try {
$pdo = new PDO($dsn, $db_user,$db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
print "接続しました... <br>";
} catch(PDOException $Exception) {
die('エラー :' . $Exception->getMessage());
}
// POSTされたデータ
$pn = $_POST['pn'] ;
try {
$sql= "SELECT * FROM Parts WHERE syohin_bango=’$pn’”;
$stmh = $pdo->prepare($sql);
$stmh->bindValue(':syohin_bango', $pn, PDO::PARAM_STR );
$stmh->execute();
$count = $stmh->rowCount();
print "検索結果は" . $count . "件です。<BR>";
} catch (PDOException $Exception) {
print "エラー:" . $Exception->getMessage();
}
if($count < 1){
print "該当がありません。お問い合わせ下さい。<BR>";
}else{
?>
以下、画面上に表示されるhtml部分は省略します。
関連する場所を(POSTの部分やWHERE句などなど)色々と変えてみましたが、5件全ての情報が表示されてしまったり全く表示されなかったりエラーがでたりと希望する結果が得られません。
現在上記の状態で「検索結果は0件です・・・(略)」と表示されます。
長々となりましたが、どこで不具合があるのか間違いをご教示下さい。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
前記したとおりcount(*)でやってもダメですか?
であればデータがないとみるのが妥当でしょう
番号もint型にしていますが、stringでチェックしてもいいかもしれません
どうしてもというのであれば、まずは
$sql= "SELECT * FROM Parts WHERE syohin_bango=’123456’”;
$stmh = $pdo->query($sql);
のようにスタティックに番号をいれてみてヒットするかチェックして下さい
アドバイスしていただいた通りチェックしましたら、やはりデータ型に問題があったようです。「商品番号」ではなく「商品名」で検索したところヒットしたので、思い切ってテーブルを0から作り直して、再度「商品番号」を検索してみたところヒットするようになりました。(データ型をCHAR(8)に変更) ありがとうございました。
No.1
- 回答日時:
prepare処理があきらかにおかしいです
$sql= "SELECT * FROM Parts WHERE syohin_bango=’$pn’”;
$stmh = $pdo->prepare($sql);
$stmh->bindValue(':syohin_bango', $pn, PDO::PARAM_STR );
$stmh->execute();
↓↓↓
bindvalueするのが:syohin_bangoなんですから
$sql= "SELECT * FROM Parts WHERE syohin_bango=:syohin_bango”;
ですね、ただ件数をしらべるならrowCountを見るのではなく
$sql= "SELECT count(*) as count FROM Parts WHERE syohin_bango=:syohin_bango”;
のようにして
$count=$stmh->fetch(PDO::FETCH_ASSOC)["count"];
のような処理をしたらどうでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
array_mapを使ったエスケープ処理
-
GPS携帯をGoogleMapに位置情報登録
-
テキストボックスに入れた内容...
-
エラー3011
-
LocalのNotesメールDBをVBAで参...
-
Accessのテーブルへ複数の主キ...
-
MySQLでデータベースにデータin...
-
pg_queryの結果を2回とりだす...
-
insert1つの処理でもトランザ...
-
JAVA SQLServerException 列名 ...
-
PHP 勤務時間の合計を出したい
-
検索結果($_POST)が2ページ目...
-
PHPでフォームからデータDBに書...
-
テーブルに入っているデータと...
-
配列をループさせてUPDATE
-
Pro*Cの構文エラー
-
VB.NET エラーになる箇...
-
カラムにデータがあるかないか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
SQL文が実行できません
-
テキストボックスに入れた内容...
-
in 'where clause'のエラーの理由
-
エラー3011
-
SQL文の実行に失敗しました???
-
LocalのNotesメールDBをVBAで参...
-
SELECT COUNTで取得した結果の表示
-
codeigniter 複数モデルでトラ...
-
PHP(PDO)でDBの情報を完全一...
-
Accessのテーブルへ複数の主キ...
-
phpのPEARのMDB2を使って出たエ...
-
ASPでRecordCountが使用でき...
-
Call to undefined method MDB2...
-
PHP4でのSmarty派生クラスの定...
-
zend(phpフレームワーク)でトラ...
-
データフォームウィザードで追...
-
DAOでデータベースを二つ開くに...
-
SQLiteでカラムを追加
おすすめ情報
ありがとうございました。WHERE句の部分、この条件式は思いつかなかったです。
$sql= "SELECT * FROM Parts WHERE syohin_bango=:syohin_bango”;
さっそく試してみました。結果・・・値は返ってきませんでした。やはりPOSTで渡した商品番号はDBに存在はしているのに、「検索結果はありません」と表示されてしまいます。
ちなみにDB側のデータ型で関係してくることがありますか?調べる対象が数字+アルファベットで整数ではないので、データ型はテキストにしているのですが。そのデータ型の違いで検索できていないとか・・・。
「dbを検索したけどそんなのは見あたらない」と返してきているのであれば、SQLのデータ型とかがひっかかっているのではと、ふと思いました。度々ですみませんが、このあたりも含めてご教示いただければと思います。
下記は検索結果のPHP文です。(実装の部分は略してます。)
<?php while ($row = $stmh->fetch(PDO::FETCH_ASSOC)) {?>
<TR>
<TD align="center"><?=htmlspecialchars($row['partsnumber'])?></TD>
<TD><?=htmlspecialchars($row['parts_name'])?></TD>
<TD><?=htmlspecialchars($row['unit_price'])?></TD>
<TD align="center"><?=htmlspecialchars($row['stock_qty'])?></TD>
</TR>
<?php} ?>
結果的に、上記に検索した番号の情報が表示されるようになるのが希望です。