国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

php連接mysql數據庫的幾種方式(mysql、mysqli、pdo)

2024-07-24 12:36:41
字體:
來源:轉載
供稿:網友

php與mysql的連接有三種API接口,分別是:PHP的MySQL擴展,PHP的mysqli擴展,PHP數據對象(PDO),下面針對以上三種連接方式做下總結,以備在不同場景下選出最優方案.

一、特性及對比

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注入問題,有很好的安全性。不過他也有缺點,某些多語句執行查詢不支持(不過該情況很少)。 

二、模塊安裝及調用

以ubuntu及其衍生版為例,通過sudo apt-get install mysqlnd 即可增加php對pdo和mysqli的支持(源碼安裝的可以選擇phpize程序進行動態擴展)。具體可以通過phpinfo頁面打開查看,其中在mysqlnd項下,可以看到如下內容:

API Extensions  mysql,mysqli,pdo_mysql

mysqli和PDO連接方法,代碼如下:

  1. // PDO 
  2. $pdo = new PDO("mysql:host=localhost;dbname=database"'username''password'); 
  3. // mysqli, 面向過程方式 
  4. $mysqli = mysqli_connect('localhost','username','password','database'); 
  5. // mysqli, 面向對象 
  6. $mysqli = new mysqli('localhost','username','password','database'); 

mysqli通過配置文件進行查詢的示例,配置文件,代碼如下:

  1. /var/www/t$ cat config.ini.php 
  2. <?php 
  3.   $dbhost ="localhost"
  4.   $dbuser = "root"
  5.   $dbpwd = "123456"
  6.   $dbname = "wish"
  7.   $charName = "utf8"
  8. ?> 

查詢代碼,代碼如下:

  1. /var/www/t$ cat mysqlquery.php 
  2. <?php 
  3. require_once("config.ini.php"); 
  4. $mysqliObj = new mysqli($dbhost,$dbuser,$dbpwd,$dbname); 
  5. if(mysqli_connect_errno()){ 
  6.  echo "連接失敗".mysqli_connect_error(); 
  7. //printf("Connect failed: %sn", mysqli_connect_error()); 
  8.  exit(); //m.survivalescaperooms.com 
  9.     $sql="select * from wp_wish"
  10.     $mysqliObj->query("set names $charName"); 
  11.     //3、處理結果 
  12.     $res$mysqliObj->query($sql); 
  13.     //var_dump($res); 
  14.     //fetch_assoc fetch_array fetch_object 
  15.     while($row=$res->fetch_row()){ 
  16.  //       print_r($row); 
  17.         foreach($row as $val){ 
  18.             echo '--'.$val
  19.         } 
  20.         echo '<br/>'
  21.     } 
  22.     //4、關閉資源 
  23.     $res->free(); 
  24.     $mysqliObj->close(); 
  25. ?> 

pdo方式進行的查詢,代碼如下:

  1. <?php 
  2. $dsn = 'mysql:dbname=test;host=127.0.0.1'
  3. $user = 'root'
  4. $password = '1'
  5. $dbh = new PDO($dsn$user$password); 
  6. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
  7. $r = $dbh->query('SELECT * FROM user'); 
  8. var_dump($r); 
  9. foreach($r as $v) { 
  10.     var_dump($v); 
  11. ?> 

總結:像discuz、phpcms、akcms等程序一般都會提供兩種連接方式mysqli或pdo-mysql(前提是你的部署環境要支持),具體在使用到類以于以上的php程序時,可以根據自己的情況而定.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长宁区| 黎城县| 安阳市| 南雄市| 天等县| 策勒县| 五常市| 泸溪县| 荥阳市| 桂东县| 金塔县| 濮阳县| 阳春市| 乌兰察布市| 珠海市| 托克托县| 师宗县| 镇康县| 玛纳斯县| 大化| 龙江县| 当雄县| 祁东县| 侯马市| 枞阳县| 昔阳县| 文登市| 积石山| 赤水市| 三台县| 梁山县| 千阳县| 宜丰县| 巢湖市| 河津市| 万宁市| 河间市| 桓仁| 清涧县| 青川县| 浦北县|