Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
new PDO()対応: PHP 5(2004)
PDOはPHPからデータベースに接続するための標準インターフェースです。MySQL・PostgreSQL・SQLiteなど複数のデータベースに対して統一的な操作を提供します。
構文
// データベースに接続します。 $pdo = new PDO($dsn, $username, $password, $options); // 接続属性を設定します。 $pdo->setAttribute($attribute, $value); // 接続属性を取得します。 $pdo->getAttribute($attribute);
メソッド一覧
| メソッド | 概要 |
|---|---|
| new PDO($dsn, $user, $pass, $options) | データベースへの接続を確立します。接続に失敗すると『PDOException』がスローされます。 |
| setAttribute($attribute, $value) | PDO接続の属性を設定します。エラーモード・フェッチモード・文字エンコーディングなどを変更できます。 |
| getAttribute($attribute) | 現在の接続属性を取得します。サーバーバージョンやドライバ名などを確認できます。 |
主な接続オプション
| 定数 | 概要 |
|---|---|
| PDO::ATTR_ERRMODE | エラー処理のモードを設定します。『PDO::ERRMODE_EXCEPTION』を指定すると例外がスローされます。 |
| PDO::ATTR_DEFAULT_FETCH_MODE | デフォルトのフェッチモードを設定します。『PDO::FETCH_ASSOC』で連想配列として取得できます。 |
| PDO::ATTR_EMULATE_PREPARES | 『false』にするとネイティブのプリペアドステートメントを使用します。SQLインジェクション対策に有効です。 |
| PDO::MYSQL_ATTR_INIT_COMMAND | MySQL接続時に最初に実行するSQLコマンドを指定します。文字コードの設定に使用されます。 |
サンプルコード
<?php
// MySQLへの基本的な接続です。
$dsn = 'mysql:host=localhost;dbname=myapp;charset=utf8mb4';
$username = 'db_user';
$password = 'db_password';
try {
$pdo = new PDO($dsn, $username, $password);
echo "接続成功"; // 接続できた場合に出力されます。
} catch (PDOException $e) {
echo "接続失敗: " . $e->getMessage();
}
// 推奨される接続設定です。オプション配列で属性を指定します。
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // エラー時に例外をスローします。
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 連想配列で結果を取得します。
PDO::ATTR_EMULATE_PREPARES => false, // ネイティブのプリペアドステートメントを使用します。
];
$pdo = new PDO($dsn, $username, $password, $options);
// SQLiteへの接続です。ファイルベースのため認証情報は不要です。
$pdo_sqlite = new PDO('sqlite:/path/to/database.db');
$pdo_sqlite->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// PostgreSQLへの接続です。
$pdo_pg = new PDO('pgsql:host=localhost;dbname=myapp', 'user', 'password');
// サーバー情報を取得します。
echo $pdo->getAttribute(PDO::ATTR_SERVER_VERSION); // 『8.0.36』のように出力されます。
echo $pdo->getAttribute(PDO::ATTR_DRIVER_NAME); // 『mysql』と出力されます。
// 接続をクラスとして管理する実用的な例です。
class Database
{
private static ?PDO $instance = null;
public static function getConnection(): PDO
{
if (self::$instance === null) {
$dsn = 'mysql:host=localhost;dbname=myapp;charset=utf8mb4';
self::$instance = new PDO($dsn, 'user', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
}
return self::$instance;
}
}
$pdo = Database::getConnection();
概要
PDOはPHP Data Objectsの略で、データベースアクセスの抽象化レイヤーを提供するクラスです。接続時には必ず『PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION』を設定してください。デフォルトのサイレントモードではエラーが無視され、デバッグが困難になります。
文字コードは DSN に『charset=utf8mb4』を指定することで設定できます。『utf8mb4』は絵文字を含む4バイトのUTF-8文字にも対応するため、『utf8』よりも推奨されます。
SQLを実行するには『PDO::prepare()』でプリペアドステートメントを使用し、結果の取得には『fetch() / fetchAll()』を使用してください。トランザクション制御は『beginTransaction()』で行います。接続エラーの処理については『try / catch』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。