目次
1. 本記事のポイント
- PHPのPDOによるMySQL接続の基本構文と挙動を解説
- 接続エラー時のハンドリングや実務上の注意点を紹介
- 複数の接続パターンと設計判断の基準を提示
2. PHP PDOでMySQLに接続する方法とは?
PDO(PHP Data Objects)は、PHPで提供されるデータベース接続のための拡張機能です。MySQLだけでなく、SQLiteやPostgreSQLなど複数のDBMSに共通インターフェースで接続できます。
特にMySQLとの接続においては、旧来のmysql_connect
やmysqli_connect
に比べて、例外ベースのエラーハンドリングやプリペアドステートメントの標準対応など、安全性と保守性に優れています。
実務では、DB接続情報を外部ファイルで管理し、共通のPDOインスタンス生成関数を用意する構成が一般的です。この記事では、基本構文から、運用でよく使う接続パターンまでを扱います。
3. 詳細解説
基本的な接続方法(try-catchで安全に)
まずは、最小限の情報でPDOインスタンスを生成する基本形です。
PHP
<?php
// MySQL接続情報
$host = 'localhost';
$dbname = 'sample_db';
$user = 'dbuser';
$pass = 'dbpass';
try {
// DSN(接続文字列)を組み立て
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
// PDOインスタンスの生成
$pdo = new PDO($dsn, $user, $pass);
// エラーモードを例外に設定
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "接続成功\n";
} catch (PDOException $e) {
// 接続失敗時の処理
echo "接続エラー: " . $e->getMessage() . "\n";
}
このように、接続文字列(DSN)には文字コード(charset
)の指定も含めておくのが推奨されます。
実務向け:共通関数として切り出す
複数ファイルから共通利用するケースでは、接続処理を関数化しておくと便利です。
PHP
<?php
function getPdoConnection(): PDO {
$config = [
'host' => 'localhost',
'dbname' => 'sample_db',
'user' => 'dbuser',
'pass' => 'dbpass',
];
$dsn = "mysql:host={$config['host']};dbname={$config['dbname']};charset=utf8mb4";
$pdo = new PDO($dsn, $config['user'], $config['pass']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
}
この関数を呼び出すだけで、接続インスタンスを取得できます。
明示的な設定項目の追加(推奨設定)
以下のようなオプションも、セキュリティやパフォーマンスの観点から設定が推奨されます。
PHP
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // ネイティブプリペア使用
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); // デフォルトのfetch形式
特にATTR_EMULATE_PREPARES
はSQLインジェクション対策に直結するため、明示的にfalseを設定することが多いです。
4. よくあるミス・誤解・落とし穴
- DSNにおける
charset
指定の抜けにより、文字化けが発生するケースが多いです。特にUTF-8とutf8mb4の違いに注意が必要です。 setAttribute
でエラーモードを設定しないと、PDOはデフォルトでサイレントモード(例外を投げない)となるため、エラーが検出されにくくなります。ATTR_EMULATE_PREPARES
の設定を省略すると、MySQLのバージョンやドライバによってはエミュレートモードで実行され、意図しないSQLの実行結果になる可能性があります。- PHPのバージョンやMySQLドライバの設定によっては、接続時のTLS/SSLオプションが無視される場合があり、セキュリティポリシーの観点で問題となることがあります。
5. まとめ
PDOは、PHPでMySQLを操作するうえで推奨される標準的な接続手段です。
接続にはDSN構文、例外処理、オプション設定を正しく行うことが重要です。特に実務では、共通化・安全性・保守性を考慮した構成とすることで、運用トラブルを防止できます。
また、文字コードやエラーモードなど、初期設定の見落としが誤動作につながるため、毎回明示的に設定しましょう。