php串連mysql資料庫幾種方法 mysql、mysqli、pdo方式介紹

來源:互聯網
上載者:User


一、特性及對比

PHP的MySQL擴充是設計開發允許PHP應用與MySQL資料庫互動的早期擴充。mysql擴充提供了一個面向過程 的介面,並且是針對MySQL4.1.3或更早版本設計的。因此,這個擴充雖然可以與MySQL4.1.3或更新的資料庫服務端 進行互動,但並不支援後期MySQL服務端提供的一些特性。由於太過古老,又不安全,所以已被後來的mysqli完全取代。
PHP的mysqli擴充,我們有時稱之為MySQL增強擴充,可以用於使用 MySQL4.1.3或更新版本中新的進階特性。其特點為:物件導向介面 、prepared語句支援、多語句執行支援、事務支援 、增強調試能力、嵌入式服務支援 、預先處理方式完全解決了sql注入的問題。不過其也有缺點, 就是只支援mysql資料庫。如果你要是不操作其他的資料庫,這無疑是最好的選擇。
PDO是PHP Data Objects的縮寫,其是PHP應用中的一個資料庫抽象層規範。PDO提供了一個統一的API介面可以使得你的PHP應用不去關心具體要 串連的資料庫伺服器系統類別型。也就是說,如果你使用PDO的API,可以在任何需要的時候無縫切換資料庫伺服器,比如從oracle 到MySQL,僅僅需要修改很少的PHP代碼。其功能類似於JDBC、ODBC、DBI之類介面。同樣,其也解決了sql注入問題,有很好的安全性。不過他也有缺點,某些多語句執行查詢不支援(不過該情況很少)。

官文對於三者之間也做了列表性的比較: 


























































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,因為其不擔有跨庫的優點,更有讀寫速度快的特點。
51cto上的給出了相關的測試結果(有點老,2011年的測試結果)。
二、模組安裝及調用
以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通過設定檔進行查詢的樣本:

設定檔

yang@crunchbang:/var/www/t$ cat config.ini.php

查詢代碼

yang@crunchbang:/var/www/t$ cat mysqlquery.php
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 '                        '
    }
    //4、關閉資源
    $res->free();
    $mysqliObj->close();
?>        

pdo方式進行的查詢

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.