PHP的mysqli擴展 PDO (使用PDO MySQL驅動和MySQL Native驅動) PHP的mysql擴展 引入的PHP版本 5.0 5.0 3.0之前 PHP5.x是否包含 是 是 是 MySQL開發狀態 活躍 在PHP5.3中活躍 僅維護 在MySQL新項目中的建議使用程度 建議 - 首選 建議 不建議 API的字符集支持 是 是 否 服務端prepare語句的支持情況 是 是 否 客戶端prepare語句的支持情況 否 是 否 存儲過程支持情況 是 是 否 多語句執行支持情況 是 大多數 否 是否支持所有MySQL4.1以上功能 是 大多數 否
從官方給出的這份結果上來看,優先推薦msqli,其次是pdo 。而“民間”給出的結果很多是傾向於使用PDO,因為其不擔有跨庫的優點,更有讀寫速度快的特點。
二、模塊安裝及調用
以ubuntu及其衍生版為例,通過sudo apt-get install mysqlnd 即可增加php對pdo和mysqli的支持(源碼安裝的可以選擇phpize程序進行動態擴展)。具體可以通過phpinfo頁面打開查看,其中在mysqlnd項下,可以看到如下內容:
API Extensions mysql,mysqli,pdo_mysql
mysqli和PDO連接方法
代碼如下 復制代碼// PDO
$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');
// mysqli, 面向過程方式
$mysqli = mysqli_connect('localhost','username','password','database');
// mysqli, 面向對象
$mysqli = new mysqli('localhost','username','password','database');
mysqli通過配置文件進行查詢的示例:
配置文件
代碼如下 復制代碼/var/www/t$ cat config.ini.php
<?php
$dbhost ="localhost";
$dbuser = "root";
$dbpwd = "123456";
$dbname = "wish";
$charName = "utf8";
?>
查詢代碼
代碼如下 復制代碼/var/www/t$ cat mysqlquery.php
<?php
require_once("config.ini.php");
$mysqliObj = new mysqli($dbhost,$dbuser,$dbpwd,$dbname);
if(mysqli_connect_errno()){
echo "連接失敗".mysqli_connect_error();
//printf("Connect failed: %sn", mysqli_connect_error());
exit(); //www.111cn.net
}
$sql="select * from wp_wish";
$mysqliObj->query("set names $charName");
//3、處理結果
$res= $mysqliObj->query($sql);
//var_dump($res);
//fetch_assoc fetch_array fetch_object
while($row=$res->fetch_row()){
// print_r($row);
foreach($row as $val){
echo '--'.$val;
}
echo '<br/>';
}
//4、關閉資源
$res->free();
$mysqliObj->close();
?>
pdo方式進行的查詢
代碼如下 復制代碼<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = '1';
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$r = $dbh->query('SELECT * FROM user');
var_dump($r);
foreach($r as $v) {
var_dump($v);
}
?>
總結:
像discuz、phpcms、akcms等程序一般都會提供兩種連接方式mysqli或pdo-mysql(前提是你的部署環境要支持),具體在使用到類以於以上的php程序時,可以根據自己的情況而定