質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

1回答

432閲覧

MySQLで検索機能(PHP)

Tarzan3154

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2023/03/02 14:08

実現したいこと

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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

現状だとSQL実行時にエラーがあっても取得できるようになっていませんのでエラーハンドリングをSQL実行時まで拡張しましょう。DB接続時よりむしろ実行時の方が起きます。
コードがこれが全てであれば、オプション設定も忘れずに。
https://www.php.net/manual/ja/pdo.error-handling.php
※全てとしたらリクエスト受け取る処理がないので未定義変数のWarning大量に出てそうですが、、

検索結果を非表示にしたい。

「検索ボタンを押したときだけ表示する」とすれば良いと思います。
リクエストにはbutton/input type=submitの情報も含まれるので、
リクエストにボタンが含まれるかどうかで確認すると良いです。
あとは結局はその5000件は表示されるわけですから、ページング機能を導入するとか。

投稿2023/03/02 19:38

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問