Q&A
実現したいこと
MySQLで作成した資産管理DBをPHPで表示させるプログラムを作っています。
・デフォルト画面
→検索結果を非表示にしたい。(レコード数が5000を超え、ページが重くなる為)
・「検索」ボタン押下時
→指定した条件で検索結果を表示したい。
前提
当初mysqliでプレースホルダを指定しようとして組んでいましたが、PDOに切り替えることになり、
データベース接続後、プリペアドステートメントを指定してみましたが、検索結果が常に
「検索対象は見つかりませんでした。」と表示され、抽出されません。
解決策をご教示お願いします。
DBの定義
CREATE TABLE `devices` ( `device_name` char(9) NOT NULL, `serial_number` varchar(9) NOT NULL, `manufacturer` varchar(9) NOT NULL COMMENT 'メーカー名 1:FUJITSU 2:Microsoft', `model` varchar(32) NOT NULL, `os` char(7) NOT NULL DEFAULT 'Windows', PRIMARY KEY (`device_name`), UNIQUE KEY `serial_number` (`serial_number`),
該当のソースコード
devices.php
1<?php 2try { 3 $db = new PDO ('mysql:dbname=deviceswithinventory;host=localhost;charset=utf8mb4', 'root',''); 4 5} catch (PDOException $e) { 6 echo 'DB接続エラー : ' . $e->getMessage(); 7} 8 9// SQL文を作成する 10$stmt = $db ->prepare('select * from devices where device_name = ? and serial_number = ? and manufacturer = ? and model = ? and os = ?'); 11 12// プレースホルダと変数を結びつける 13$stmt->bindparam(1, $device_name, PDO::PARAM_STR); 14$stmt->bindparam(2, $serial_number, PDO::PARAM_STR); 15$stmt->bindparam(3, $manufacturer, PDO::PARAM_STR); 16$stmt->bindparam(4, $model, PDO::PARAM_STR); 17$stmt->bindparam(5, $os, PDO::PARAM_STR); 18 19// 実行する 20$stmt->execute(); 21 22$devices = $db ->query('SELECT * FROM devices ORDER BY device_name') 23?> 24 25 26<!DOCTYPE html> 27<html lang="ja"> 28<head> 29<meta charset="utf-8"> 30<meta name="viewport" content="width=device-width, initial-scale=1"> 31<title>端末テーブル表示</title> 32<!-- Bootstrap読み込み(スタイリングのため) --> 33<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> 34</head> 35<body> 36<div class="flex_test-box"> 37 <div class="flex_test-item"> 38 <h1 class="col-xs-6 col-xs-offset-3">端末テーブル</h1> 39 </div> 40</div> 41<h3 class="col-xs-6 col-xs-offset-3">検索フォーム</h3> 42<div class="col-xs-6 col-xs-offset-3 well"> 43 44 <?php //②検索フォーム ?> 45 <form method="get"> 46 <div class="form-group"> 47 <label for="InputDevice_name">端末名</label> 48 <input name="device_name" class="form-control" id="InputDevice_name" value="<?php echo isset($_GET['device_name']) ? htmlspecialchars($_GET['device_name']) : '' ?>"> 49 </div> 50 <div class="form-group"> 51 <label for="InputSerial_number">シリアル</label> 52 <input name="serial_number" class="form-control" id="InputSerial_number" value="<?php echo isset($_GET['serial_number']) ? htmlspecialchars($_GET['serial_number']) : '' ?>"> 53 </div> 54 <div class="form-group"> 55 <label for="InputManufacturer">メーカー</label> 56 <select name="manufacturer" class="form-control" id="InputManufacturer"> 57 <option value="0" <?php echo empty($_GET['manufacturer']) ? 'selected' : '' ?>>選択しない</option> 58 <option value="1" <?php echo isset($_GET['manufacturer']) && $_GET['manufacturer'] == '1' ? 'selected' : '' ?>>FUJITSU</option> 59 <option value="2" <?php echo isset($_GET['manufacturer']) && $_GET['manufacturer'] == '2' ? 'selected' : '' ?>>Microsoft</option> 60 </select> 61 </div> 62 <div class="form-group"> 63 <label for="InputModel">品名/型番</label> 64 <select name="model" class="form-control" id="InputModel"> 65 <option value="0" <?php echo empty($_GET['model']) ? 'selected' : '' ?>>選択しない</option> 66 <option value="1" <?php echo isset($_GET['model']) && $_GET['model'] == '1' ? 'selected' : '' ?>>Surface Laptop Go</option> 67 <option value="2" <?php echo isset($_GET['model']) && $_GET['model'] == '2' ? 'selected' : '' ?>>ARROWS Tab Q5010/EEG(FARQ25045Z)</option> 68 <option value="3" <?php echo isset($_GET['model']) && $_GET['model'] == '3' ? 'selected' : '' ?>>ARROWS Tab Q509/VE(FARQ22014)</option> 69 <option value="4" <?php echo isset($_GET['model']) && $_GET['model'] == '4' ? 'selected' : '' ?>>ARROWS Tab Q508/SE(FARQ18011)</option> 70 <option value="5" <?php echo isset($_GET['model']) && $_GET['model'] == '5' ? 'selected' : '' ?>>ARROWS Tab Q507/PE(FARQ14011)</option> 71 </select> 72 </div> 73 <div class="form-group"> 74 <label for="InputOs">OS</label> 75 <input type="os" class="form-control" id="InputOs" value="Windows"> 76 </div> 77 <button type="submit" class="btn btn-default" name="search">検索</button> 78 </form> 79 80</div> 81<div class="col-xs-6 col-xs-offset-3"> 82 <?php //③取得データを表示する ?> 83 84 <?php if(isset($deviceData) && count($deviceData)): ?> 85 <p class="alert alert-success"><?php echo count($deviceData) ?>件見つかりました。</p> 86 <table class="table"> 87 <thead> 88 <tr> 89 <th>端末名</th> 90 <th>シリアル</th> 91 <th>メーカー</th> 92 <th>品名/型番</th> 93 <th>OS</th> 94 </tr> 95 </thead> 96 <tbody> 97 <?php foreach($deviceData as $row): ?> 98 <tr> 99 <td><?php echo htmlspecialchars($row['device_name']) ?></td> 100 <td><?php echo htmlspecialchars($row['serial_number']) ?></td> 101 <td><?php echo htmlspecialchars($row['manufacturer'] == 1 ? 'FUJITSU' : 'Microsoft') ?></td> 102 <td><?php echo htmlspecialchars($row['model'] ) ?></td> 103 <td><?php echo htmlspecialchars($row['os']) ?></td> 104 </tr> 105 <?php endforeach; ?> 106 </tbody> 107 </table> 108 <?php else: ?> 109 <p class="alert alert-danger">検索対象は見つかりませんでした。</p> 110 <?php endif; ?> 111 112 113 114</div> 115</body> 116</html>
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。