お恥ずかしながら、最近知ったのですが、PHP の Mysql モジュールは、DEPRECATEDなのですね。
PHP マニュアル > 関数リファレンス > データベース関連 > ベンダー固有のモジュール > MySQL > Mysql
この拡張モジュールは PHP 5.5.0 で非推奨になりました。将来削除される予定なので、 この拡張モジュールを使って新しくコードを書くことはおすすめしません。 新しくコードを書くときには mysqli や PDO_MySQL を使うべきです。
代わりに、mysqliもしくは、PDOを使うべきとのことですが、公式ドキュメントの比較を見てみます。違いは、方言レベルというところでしょうか、新規開発時での移行には苦労しなそうですね。
どの API を使うか
PHP には、MySQL への接続用の API が三種類あります。 以下に、mysql と mysqli そして PDO が提供する 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']); ?>
なんとなく気になったので、Mysqlが廃止になり、Mysqli等への移行が促されているのかについて調べました。
PHPのmysqli拡張とは何か? から抜粋&意訳。
MySQL改善版(improved)拡張機能として知られているmysqi拡張機能は、MySQL 4.1.3以降の新機能を最大限活用するために開発されました...
- オブジェクト指向インターフェース
- プリペアードステートメント対応
- マルチステートメント対応
- トランザクション対応
- デバッグがより便利に
- 埋め込みサーバー対応
一番は、あんまりにもコードがレガシーなので書き直したかった。次に、プリペアードステートメントに対応させたかったということでしょうか。
MySQL 4.1.xとは?
2004年10月 - Version 4.1 プロダクションリリース。ベータ版は2004年6月にリリース。R木、B木、サブクエリー、prepared statements搭載。