PHP フォームからMySQLへ接続してselectするサンプル

PHPのフォームからMySQLへ接続してselectするサンプルです。
XAMPPのMySQL(MariaDB)を使用します。

確認環境
・PHP 7.2.8
・XAMPP 7.2.8
・Windows 10

目次

フォームからDBの値を取得するイメージ

フォームからDBの値を取得するイメージです。
1.テキストボックスに数字のキーを入力して送信ボタンを押します。

2.入力値を元にMySQLのテーブルのデータを検索し該当のデータを表示します。

 

XAMPPの環境

XAMPPのMySQLを使用します。
XAMPPのインストール方法は以下を参照願います。

ローカルにPHPが動く環境を作る手順(XAMPP)

データベースとテーブル

XAMMPのMySQLにデータベースとテーブルを作成しておく必要があります。
作成方法は以下を参照願います。

XAMPP phpMyAdminでデータベースを作成する手順
XAMPP phpMyAdminでテーブルを作成する手順

以下のテーブルを使用します。テーブル名は「syain」です。

PHPのファイル

以下2つのファイルがあります。
 1.index.php・・・値を送信する側のファイル。画面でテキストを入力しsubmitを行って値を送信する。
 2.testform.php・・・値を受け取る側のファイル。index.phpから値を受け取ってMySQLを検索し画面に表示する。

サンプルでは、htdocsフォルダ配下にtest1フォルダを作成したので、ブラウザのURL欄には、http://localhost/test1/と入力します。

 

値を送信する側のファイル

値を送信する側のファイルです。(index.php)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>submit</title>
</head>
<body >

<form method="post" action="testform.php">
<input type="text" name="id">
<input type="submit" value="送信ボタン">
</form>

</body>
</html>

9行目は、methodでpost方式を指定し、actionで送信先(testform.php)を指定します。
このサンプルでは、testform.phpとindex.phpは同じフォルダに配置しています。
10行目は、テキストボックスです。画面から文字を入力します。
11行目は、送信ボタンです。ボタンを押すとsubmitが行われます。

 

値を受け取る側のファイル

値を受け取る側のファイルです。(testform.php)
index.phpから値を受け取ってMySQLを検索し画面に表示します。
SQLインジェクションを防止するためプレースホルダを利用します。

<?php
// DB接続情報
$dsn = 'mysql:host=localhost;dbname=testphp;charset=utf8mb4';
$username = 'root';
$password = '';

// POSTデータを受け取る
$id = $_POST['id'];

// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$pdo = new PDO($dsn,$username,$password);

	//  SQL文 :idは、名前付きプレースホルダ
	$sql = "select * from syain where id = :id";

	// プリペアドステートメントを作成
	$stmt = $pdo->prepare($sql);

	// プレースホルダと変数をバインド
	$stmt -> bindParam(":id",$id);
	$stmt -> execute(); //実行

	// データを取得
	$rec = $stmt->fetch(PDO::FETCH_ASSOC);

	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));   
}
function escape1($str)
{
    return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>select</title>
</head>
<body >

<?php foreach ($rec as $a):?>
	<?=escape1($a)?>
<?php endforeach; ?>

</body>
</html>

16行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
22行目は、8行目の変数を16行目のプレースホルダにバインドしています。

プレースホルダ

  • SQLにある(:名称)は、名前付きプレースホルダです。
    →疑問符(?)のプレースホルダのやり方もあります。
  • 動的に値をセットできます。
  • 入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
  • 固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。

htmlspecialchars関数

PDO::FETCH_ASSOC

関連の記事

PHP MySQLへ接続してselectするサンプル
PHP MySQLへ接続してinsert/update/deleteするサンプル
ローカルにPHPが動く環境を作る手順(XAMPP)
PHP フォームの値をsubmitするサンプル
XAMPP phpMyAdminでデータベースを作成する手順
XAMPP phpMyAdminでテーブルを作成する手順

プログラムでつまったらteratailに登録して質問しましょう!↓↓↓

△上に戻る