PHP 中使用 PDO_PHP教程

來源:互聯網
上載者:User
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 將返回的Null 字元串轉換為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 構造方法(串連資料庫)
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544', array(PDO::ATTR_PERSISTENT=>true));
} catch (PDOException $e) {
exit('資料庫連接失敗,錯誤資訊:'. $e->getMessage());
}
?>
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,返回的為受影響的行數


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 ('酒井法子','jiujinfazi@sina.com.cn','28','{$addTime}')";
$row = $pdo->exec($sql);
if ($row) {
echo '添加成功';
} else {
echo '添加失敗';
}
?>
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 ('酒井法子','jiujinfazi@sina.com.cn','28','{$addTime}')";
$row = $pdo->exec($sql);
if ($row) {
echo '添加成功';
} else {
echo '添加失敗';
}
?>
2、使用 PDO::query() 方法


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

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'] . '
';
}
echo '總共'. $result->rowCount() .'條';
} catch (PDOException $e) {
exit($e->getMessage());
}
?>
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'] . '
';
}
echo '總共'. $result->rowCount() .'條';
} catch (PDOException $e) {
exit($e->getMessage());
}
?>


PDO 對預先處理語句的支援

摘自 Lee.的專欄

http://www.bkjia.com/PHPjc/478465.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478465.htmlTechArticlePDO簡介 PDO 是一個資料庫訪問抽象層,作用是統一各種資料庫(MySQL、MSSQL、Oracle、DB2、PostgreSQL)的提供者,能輕鬆的在不同的資料庫之間...

  • 聯繫我們

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