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,因為其不擔有跨庫的優點,更有讀寫速度快的特點。

二、模組安裝及調用

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.