【サクッと解説】PHP PDOでMySQLに接続する方法

目次

1. 本記事のポイント

  • PHPのPDOによるMySQL接続の基本構文と挙動を解説
  • 接続エラー時のハンドリングや実務上の注意点を紹介
  • 複数の接続パターンと設計判断の基準を提示

2. PHP PDOでMySQLに接続する方法とは?

PDO(PHP Data Objects)は、PHPで提供されるデータベース接続のための拡張機能です。MySQLだけでなく、SQLiteやPostgreSQLなど複数のDBMSに共通インターフェースで接続できます。

特にMySQLとの接続においては、旧来のmysql_connectmysqli_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構文、例外処理、オプション設定を正しく行うことが重要です。特に実務では、共通化・安全性・保守性を考慮した構成とすることで、運用トラブルを防止できます。

また、文字コードやエラーモードなど、初期設定の見落としが誤動作につながるため、毎回明示的に設定しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
目次