PHP MySQLへ接続してselectするサンプル

PHPのMySQLへ接続してselectするサンプルです。
(確認環境:PHP 7.2.8,XAMPP 7.2.8)

目次

SQLの実行 MySQLへ接続してselectする
  プレースホルダ
  htmlspecialchars関数
  PDO::FETCH_ASSOC
  例外発生時
環境 接続先のデータベースとテーブル

MySQLへ接続してselectする

MySQLへ接続してselectするサンプルです。

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

$id = 3; //プレースホルダの値を指定

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

	// SQL文 :idは、名前付きプレースホルダ
	$sql = "select * from employee 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>

3行目は、DBの接続情報です。testphpは、データベース名です。utf8mb4は文字コードです。
15行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
21行目は、7行目の変数を15行目のプレースホルダにバインドしています。

プレースホルダ

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

htmlspecialchars関数

PDO::FETCH_ASSOC

例外発生時

MySQLを起動せずに上記コードを実施した場合は、29行目のcatchのロジックが実行され、以下のエラーメッセージが表示されます。

SQLSTATE[HY000] [2002] 対象のコンピューターによって拒否されたため、接続できませんでした。

try-catchを記述しなかった場合は、以下のエラーメッセージが表示されます。

Fatal error: in D:\xampp\htdocs\testPHP\index.php on line 17

以下はPHPマニュアルのmb_convert_encodingのリンクです。
https://php.net/manual/ja/function.mb-convert-encoding.php

接続先のデータベースとテーブル

XAMPPのMySQLを使用しています。
XAMPPのインストール方法と、XAMMPのMySQLにデータベースとテーブルを作成する方法は以下を参照願います。

XAMPP インストールとHello Worldを表示
XAMPP phpMyAdminでデータベースを作成/削除する手順
XAMPP phpMyAdminでテーブルを作成/データを登録する

関連の記事

PHP フォームからMySQLへ接続してselectするサンプル
PHP MySQLへ接続してinsert/update/deleteする
PHP フォームの値を別画面に渡す(GET/POST)

△上に戻る