PHP には、様々な MySQL へ接続する API があります。 以下に、mysqli と PDO が提供する API を示します。 それぞれのコードは、"example.com" 上で稼働する MySQL サーバーに ユーザー名 "user"、パスワード "password" で接続するものです。 そして、クエリを実行してユーザーにあいさつします。
例1 MySQL 用 API の比較
<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);
// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
機能の比較
全体的なパフォーマンスは、どれもほぼ同じです。 拡張モジュール自体のパフォーマンスが PHP のウェブリクエストの実行時間に及ぼす影響はごくわずかで、 たいていは 0.1% 程度に過ぎません。
ext/mysqli | PDO_MySQL | |
---|---|---|
どのバージョンの PHP から使えるか | 5.0 | 5.1 |
PHP 7.x と PHP 8.x に同梱されているか | Yes | Yes |
開発状況 | 進行中 | 進行中 |
ライフサイクル | 活動中 | 活動中 |
新規開発でおすすめできるか | Yes | Yes |
オブジェクト指向のインターフェイス | Yes | Yes |
手続き型のインターフェイス | Yes | No |
mysqlnd によるノンブロッキングな非同期クエリ | Yes | No |
持続的接続 | Yes | Yes |
文字セット | Yes | Yes |
サーバーサイドのプリペアドステートメント | Yes | Yes |
クライアントサイドのプリペアドステートメント | No | Yes |
ストアドプロシージャ | Yes | Yes |
複数ステートメント | Yes | Most |
トランザクション | Yes | Yes |
SQL によるトランザクション制御 | Yes | Yes |
MySQL 5.1+ の全機能への対応 | Yes | Most |