PHPがMySQLデータベースに接続する3つの方法(mysql、mysqli、pdo)

10106 ワード

PHPとMySQLの接続には、PHPのMySQL拡張、PHPのmysqli拡張、PHPデータオブジェクト(PDO)の3つのAPIインタフェースがあり、以下、以上の3つの接続方式についてまとめ、異なるシーンで最適な案を選ぶ準備をしています.
PHPのMySQL拡張はphpアプリケーションがMySQLデータベースと対話できるように設計開発された初期の拡張である.MySQL拡張はプロセス向けのインタフェースを提供し、MySQL 4のためである.1.3またはそれ以前のバージョンで設計されています.そのためこの拡張はMySQL 4とすることができる.1.3または更新されたデータベース・サービスは相互作用しますが、後でMySQLサービスが提供するいくつかの特性はサポートされていません.古くて安全ではないので、後のmysqliに完全に取って代わられました.
PHPのmysqli拡張は、MySQL 4を使用するために使用できるMySQL拡張と呼ばれることがあります.1.3またはバージョンの新しい高度なプロパティを更新します.オブジェクトインタフェース向け、prepared文サポート、マルチ文実行サポート、トランザクションサポート、強化されたデバッグ能力、組み込みサービスサポート、前処理方式がsql注入の問題を完全に解決したことを特徴としています.しかし、mysqlデータベースのみをサポートするという欠点もあります.他のデータベースを操作しない場合は、これが最善の選択に違いありません.
PDOはPHP Data Objectsの略であり、PHPアプリケーションにおけるデータベース抽象層仕様である.PDOは、統合されたAPIインタフェースを提供し、PHPアプリケーションが接続するデータベース・サーバ・システム・タイプに関心を持たないようにします.つまり、PDOのAPIを使用すると、OracleからMySQLまで、必要なときにデータベース・サーバをシームレスに切り替えることができます.PHPコードを変更するだけです.その機能はJDBC、ODBC、DBIなどのインタフェースに似ている.同様に,sql注入問題も解決し,良好な安全性を有している.しかし、いくつかの多文実行クエリがサポートされていないという欠点もあります(ただし、この場合は少ない).
官文は3つの間にもリスト的な比較を行った.
 
PHPのmysqli拡張
PDO
PHPのmysql拡張
導入されたPHPバージョン
5.0
5.0
3.0より前
PHP5.x含むかどうか
はい
はい
はい
MySQL開発ステータス
アクティブ
PHP 5.3で活躍
メンテナンスのみ
MySQLの新しいプロジェクトでの推奨使用度
推奨-優先
推奨
推奨しない
APIの文字セットサポート
はい
はい
いいえ
サービス側prepare文のサポート状況
はい
はい
いいえ
クライアントprepare文のサポート状況
いいえ
はい
いいえ
ストアド・プロシージャのサポート
はい
はい
いいえ
マルチステートメント実行のサポート
はい
ほとんど
いいえ
すべてのMySQL 4をサポートするかどうか.1以上の機能
はい
ほとんど
いいえ
 
公式に与えられたこの結果から,msqliを優先的に推奨し,次いでPDOである.「民間」の結果はPDOを使う傾向が多い.ライブラリをまたぐ利点を担わず、読み書きが速いという特徴があるからだ.
 
1.PHPとMysql拡張(本拡張はPHP 5.5.0から廃棄され、将来削除される)は、PHPがオリジナルの方法でデータベースに接続され、プロセス向けである
php
$mysql_conf = array(
    'host'    => '127.0.0.1:3306', 
    'db'      => 'test', 
    'db_user' => 'root', 
    'db_pwd'  => 'root', 
    );
$mysql_conn = @mysql_connect($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if (!$mysql_conn) {
    die("could not connect to the database:
" . mysql_error());// } mysql_query("set names 'utf8'");// $select_db = mysql_select_db($mysql_conf['db']); if (!$select_db) { die("could not connect to the db:
" . mysql_error()); } $sql = "select * from user;"; $res = mysql_query($sql); if (!$res) { die("could get the res:
" . mysql_error()); } while ($row = mysql_fetch_assoc($res)) { print_r($row); } mysql_close($mysql_conn); ?>

 
2.PHPとMysqli拡張、プロセス、オブジェクト向け
php
$mysql_conf = array(
    'host'    => '127.0.0.1:3306', 
    'db'      => 'test', 
    'db_user' => 'root', 
    'db_pwd'  => 'joshua317', 
    );

$mysqli = @new mysqli($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if ($mysqli->connect_errno) {
    die("could not connect to the database:
" . $mysqli->connect_error);// } $mysqli->query("set names 'utf8';");// $select_db = $mysqli->select_db($mysql_conf['db']); if (!$select_db) { die("could not connect to the db:
" . $mysqli->error); }$sql = "select uid from user where name = 'joshua';"; $res = $mysqli->query($sql); if (!$res) { die("sql error:
" . $mysqli->error); } while ($row = $res->fetch_assoc()) { var_dump($row); } $res->free(); $mysqli->close(); ?>

 
 
2.PHPとPDO拡張、プロセス、オブジェクト向け
php
$mysql_conf = array(
    'host'    => '127.0.0.1:3306', 
    'db'      => 'test', 
    'db_user' => 'root', 
    'db_pwd'  => 'joshua317', 
    );
$pdo = new PDO("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//    pdo  
$pdo->exec("set names 'utf8'");
$sql = "select * from user where name = ?";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, 'joshua', PDO::PARAM_STR);
$rs = $stmt->execute();
if ($rs) {
    // PDO::FETCH_ASSOC       
    // PDO::FETCH_NUM         
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        var_dump($row);
    }
}

$pdo = null;//    
?>