程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 中使用 PDO

PHP 中使用 PDO

編輯:關於PHP編程

PDO簡介
PDO 是一個“數據庫訪問抽象層”,作用是統一各種數據庫(MySQL、MSSQL、Oracle、DB2、PostgreSQL……)的訪問接口,能輕松的在不同的數據庫之間完成切換,使得數據庫間的移植容易實現。

PDO 驅動


  支持PDO 的驅動及相應的數據庫列表 驅動名 對應訪問的數據庫  PDO_DBLIB  FreeTDS / Microsoft SQL Server / Sybase  PDO_FIREBIRD  Firebird / Interbase 6  PDO_MYSQL  MySQL  PDO_OCI  Oracle  PDO_ODBC  ODBC v3  PDO_PGSQL  PostgreSQL  PDO_SQLITE  SQLite  

PDO安裝
PDO 是 PHP 5.1 發行的,也就是說,在 5.1 之前的版本是不支持 PDO 的,PDO 也是未來 PHP 處理數據庫的首選和趨勢。

下面介紹 PDO 的安裝:

1、Linux 環境

        在 Linux 環境中下為啟用對 MySQL 的 PDO 程序驅動支持,需要在安裝 PHP (5.1以上版本)的源代碼包時,向 configure 命令中添加:

--with-pdo-mysql=/usr/local/mysql   // "/usr/local/mysql"為 MySQL 服務器的安裝目錄 
--with-pdo-mysql=/usr/local/mysql   // "/usr/local/mysql"為 MySQL 服務器的安裝目錄
2、Windows 環境

        修改 php.ini 文件,找到如下,把前面的“;”(分號:代表注釋)去掉即可!

;extension=php_pdo.dll            // 所有 PDO 驅動共享的擴展,這個必須有 
;extension=php_pdo_mysql.dll  // 使用 MySQL 使用這行 
;extension=php_pdo_mssql.dll  // 使用 MSSQL 使用這行 
;extension=php_pdo.dll            // 所有 PDO 驅動共享的擴展,這個必須有
;extension=php_pdo_mysql.dll  // 使用 MySQL 使用這行
;extension=php_pdo_mssql.dll  // 使用 MSSQL 使用這行
        保存 php.ini 文件,重啟 Apache 服務器,查看 phpinfo() 函數,出現下圖說明安裝成功。

 \

 

 注意:Windows 環境中,有時可能配置不成功,出現不了上圖的現象。這時,把 PHP 安裝擴展中的 php_pdo_mysql.dll、php_pdo.dll……等文件拷貝到系統安裝路徑的 Windows 下。

 


創建 PDO 對象
PDO 的構造方法原型如下:

__construct(string dsn [,string db_user [,string db_pwd [,array driver_options]]]) 
__construct(string dsn [,string db_user [,string db_pwd [,array driver_options]]])參數說明:
1、dsn(data source name):數據源名稱,定義用到的數據庫和驅動;

        a、連接 MySQL 數據庫的DSN:mysql:host=localhost;dbname=test  // 主機名為:localhost;數據庫名稱為:test


        b、連接 Oracle 數據庫的DSN:oci:dbname=//localhost:1521/test    // 主機名為:localhost;端口:1521;數據庫名稱為:test

        ……更多的 DSN 請參考 PHP 手冊


2、db_user:數據庫用戶名;

3、db_pwd:數據庫密碼;

4、driver_options:是一個數組,用來指定連接所需的所有額外選項

PDO 用來指定連接所需的所有額外選項 

選項名  PDO::ATTR_AUTOCOMMIT  確定PDO 是否關閉自動提交功能,設置FALSE 為關閉  PDO::ATTR_CASE  強制PDO 獲取的表字段字符的大小寫轉換,或原樣使用列信息  PDO::ATTR_ERRMODE  設置錯誤處理的模式  PDO::ATTR_PERSISTENT  確定連接是否為持久連接,默認為FALSE,不持久連接  PDO::ATTR_ORACLE_NULLS  將返回的空字符串轉換為SQL 的NULL  PDO::ATTR_PREFETCH  設置應用程序提前獲取的數據大小,以K 字節為單位  PDO::ATTR_TIMEOUT  設置超時之前的等待時間(秒為單位)  PDO::ATTR_SERVER_INFO  包含與數據庫特有的服務器信息  PDO::ATTR_SERVER_VERSION  包含與數據庫服務器版本號有關的信息  PDO::ATTR_CLIENT_VERSION  包含與數據庫客戶端版本號有關的信息  PDO::ATTR_CONNECTION_STATUS  設置超時之前的等待時間(秒為單位)  

調用 PDO 構造方法(連接數據庫)
<?php  
    try { 
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544', array(PDO::ATTR_PERSISTENT=>true)); 
    } catch (PDOException $e) { 
        exit('數據庫連接失敗,錯誤信息:'. $e->getMessage()); 
    } 
?> 
<?php
 try {
  $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544', array(PDO::ATTR_PERSISTENT=>true));
 } catch (PDOException $e) {
  exit('數據庫連接失敗,錯誤信息:'. $e->getMessage());
 }
?>


PDO 對象的成員方法
PDO對象中的成員方法

 

方法名  getAttribute()  獲取一個“數據庫連接對象”的屬性  setAttribute()  為一個“數據庫連接對象”設定屬性  errorCode()  獲取錯誤碼  errorInfo()  獲取錯誤信息  exec()   處理一條SQL 語句,並返回所影響的行數  query()  處理一條SQL 語句,並返回一個"PDOStatement" 對象  quote()  為某個SQL 中的字符串添加引號  lastInsertId()  獲取插入到表中的最後一條數據的主鍵值  prepare()  負責准備執行的SQL 語句  getAvailableDrivers()  獲取有效的PDO 驅動器名稱  beginTransaction()  開始一個事務,標明回滾起始點  commit()  提交一個事務,並執行SQL  rollback()  回滾一個事務  

使用 PDO 執行 SQL 語句

1、使用 PDO::exec() 方法

PDO::exec() 方法多用在 SQL 中的 INSERT、UPDATE、DELETE,返回的為受影響的行數


<?php  
    date_default_timezone_set('PRC'); 
    header('Content-Type:text/html;Charset=utf-8'); 
    try { 
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544'); 
        $pdo->setAttribute(PDO::ATTR_PERSISTENT, true);  // 設置數據庫連接為持久連接  
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 設置拋出錯誤  
        $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 設置當字符串為空轉換為 SQL 的 NULL  
        $pdo->query('SET NAMES utf8');  // 設置數據庫編碼  
    } catch (PDOException $e) { 
        exit('數據庫連接錯誤,錯誤信息:'. $e->getMessage()); 
    } 
    $addTime = date('Y-m-d H:i:s', time()); 
    $sql = "INSERT INTO think_user(userName,email,age,addTime) VALUES ('酒井法子','[email protected]','28','{$addTime}')"; 
    $row = $pdo->exec($sql); 
    if ($row) { 
        echo '添加成功'; 
    } else { 
        echo '添加失敗'; 
    } 
?> 
<?php
 date_default_timezone_set('PRC');
 header('Content-Type:text/html;Charset=utf-8');
 try {
  $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
  $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // 設置數據庫連接為持久連接
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 設置拋出錯誤
  $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 設置當字符串為空轉換為 SQL 的 NULL
  $pdo->query('SET NAMES utf8');  // 設置數據庫編碼
 } catch (PDOException $e) {
  exit('數據庫連接錯誤,錯誤信息:'. $e->getMessage());
 }
 $addTime = date('Y-m-d H:i:s', time());
 $sql = "INSERT INTO think_user(userName,email,age,addTime) VALUES ('酒井法子','[email protected]','28','{$addTime}')";
 $row = $pdo->exec($sql);
 if ($row) {
  echo '添加成功';
 } else {
  echo '添加失敗';
 }
?>
2、使用 PDO::query() 方法


PDO::query() 方法用在 SQL 中的 SELECT 查詢上。如果該方法執行成功,那麼將返回一個 PDOStatement 對象,使用 rowCount() 方法可以返回影響的行數

<?php  
    header('Content-Type:text/html;Charset=utf-8'); 
    try { 
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544'); 
        $pdo->setAttribute(PDO::ATTR_PERSISTENT, true);  // 設置數據庫連接為持久連接  
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 設置拋出錯誤  
        $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 設置當字符串為空轉換為 SQL 的 NULL  
        $pdo->query('SET NAMES utf8');  // 設置數據庫編碼  
    } catch (PDOException $e) { 
        exit('數據庫連接錯誤,錯誤信息:'. $e->getMessage()); 
    } 
    $sql = "SELECT userName,email,age,addTime FROM think_user"; 
    try { 
        $result = $pdo->query($sql); 
        foreach ($result as $row) { 
            echo $row['userName'] . "\t" . $row['email'] . "\t" .$row['age']  . "\t" .$row['addTime'] . '<br />'; 
        } 
        echo '總共'. $result->rowCount() .'條'; 
    } catch (PDOException $e) { 
        exit($e->getMessage()); 
    } 
?> 
<?php
 header('Content-Type:text/html;Charset=utf-8');
 try {
  $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
  $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // 設置數據庫連接為持久連接
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 設置拋出錯誤
  $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 設置當字符串為空轉換為 SQL 的 NULL
  $pdo->query('SET NAMES utf8');  // 設置數據庫編碼
 } catch (PDOException $e) {
  exit('數據庫連接錯誤,錯誤信息:'. $e->getMessage());
 }
 $sql = "SELECT userName,email,age,addTime FROM think_user";
 try {
  $result = $pdo->query($sql);
  foreach ($result as $row) {
   echo $row['userName'] . "\t" . $row['email'] . "\t" .$row['age']  . "\t" .$row['addTime'] . '<br />';
  }
  echo '總共'. $result->rowCount() .'條';
 } catch (PDOException $e) {
  exit($e->getMessage());
 }
?>


PDO 對預處理語句的支持

摘自 Lee.的專欄
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved