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がオリジナルの方法でデータベースに接続され、プロセス向けである
2.PHPとMysqli拡張、プロセス、オブジェクト向け
2.PHPとPDO拡張、プロセス、オブジェクト向け
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;//
?>