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程序時,可以根據自己的情況而定