どの API を使うか

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

mysqliPDO_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