PHP には、MySQL への接続用の API が三種類あります。 以下に、mysql と 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']);
// mysql
$c = mysql_connect("example.com", "user", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
?>
おすすめの API
mysqli か PDO_MySQL のどちらかを使うことをおすすめします。 古い mysql 拡張モジュールを新規開発で使うのはおすすめしません。 というのも、これは PHP 5.5.0 で非推奨となり、PHP 7 で削除されたからです。 詳しい機能比較を以下に示します。全体的なパフォーマンスは、どれもほぼ同じです。 拡張モジュール自体のパフォーマンスが PHP のウェブリクエストの実行時間に及ぼす影響はごくわずかで、 たいていは 0.1% 程度に過ぎません。
機能比較
ext/mysqli | PDO_MySQL | ext/mysql | |
---|---|---|---|
どのバージョンの PHP から使えるか | 5.0 | 5.1 | 2.0 |
PHP 5.x に同梱されているか | Yes | Yes | Yes |
PHP 7.x に同梱されているか | Yes | Yes | No |
開発状況 | 進行中 | 進行中 | 5.x では保守対応のみ、7.x では削除 |
ライフサイクル | 活動中 | 活動中 | 5.x で非推奨、7.x で削除 |
新規開発でおすすめできるか | Yes | Yes | No |
オブジェクト指向のインターフェイス | Yes | Yes | No |
手続き型のインターフェイス | Yes | No | Yes |
mysqlnd によるノンブロッキングな非同期クエリ | Yes | No | No |
持続的接続 | Yes | Yes | Yes |
文字セット | Yes | Yes | Yes |
サーバーサイドのプリペアドステートメント | Yes | Yes | No |
クライアントサイドのプリペアドステートメント | No | Yes | No |
ストアドプロシージャ | Yes | Yes | No |
複数ステートメント | Yes | Most | No |
トランザクション | Yes | Yes | No |
SQL によるトランザクション制御 | Yes | Yes | Yes |
MySQL 5.1+ の全機能への対応 | Yes | Most | No |