PHP PDO使用學習
基礎概念
PDO是PHP Date Object的簡稱,隨PHP5.1發佈,支持多種數據庫(Firebird、freeTDS、Interbase、MySql等),使用時僅需使用PDO接口中的方法就可以對數據庫進行操作,選擇不同的數據庫僅需修改PDO中的DSN(數據源名稱)即可。
PDO是一個“數據庫訪問抽象層”;作用是統一各種數據庫的訪問接口,與mysql函數可以相比,跨數據庫能力更強;與ADODB相比,效率更高。
PDO配置
linux環境(使用mysql)
在configure命令中添加如下代碼
--with-pdo-mysql=/path/to/mysql/installation
Windows環境(使用mysql)
在php.ini文件中添加
extension=php_pdo.dll
extension=php_mysql_pdo.dll
或者將這兩句的註釋去掉(該文件中的註釋格式是#或者:)
PDO連接數據庫
首先需要實例化一個PDO對象
PDO構造函數
__constructs(string $dsn[,string $username[,string $password[,array $driver_options]]])
$dsn:數據源名,包括主機名端口號和數據庫名稱
$username:連接數據庫的用戶名
$password:連接數據庫的密碼
$dirver_options:連接數據庫選項(驅動選項數組){例如array(PDO:ATTR_PERSISTENT => true),這樣數據庫連接即爲持久鏈接}
例(連接mysql數據庫):
<?php
$dbms = 'mysql';
$host = 'localhost';
$dbName = 'test';
$user = 'root';
$password = '';
$dsn = "$dbms:host=$host;dbname=$dbName";
try
{
$dbh = new PDO($dsn,$user,$password); //初始化PDO對象
echo "連接成功!";
foreach ($dbh->query('SELECT * FORM FOO') as $row)
{
print_r($row);
}
$dbh = null; //將連接返回的PDO對象置空,相當於將連接斷開
}
?>
DSN :Date Source Name(數據源名稱) 提供連接數據庫需要的信息。
格式爲三部分:PDO驅動名稱(如mysql、sqlite等);冒號和驅動特定的語法。
例如:連接數據庫mysql
$dsn="$mysql:host=localhost;port=3303;dbname=test"
因爲數據庫服務器和PHP腳本不在一個服務器上,而數據庫盡在特定端口上監聽連接請求(mysql是3306),單數據庫管理員可能會修改端口號,多以PHP腳本有可能會找不到數據庫的端口,此時可以在DSN中包含端口號。
PDO執行Sql語句
exec方法
int PDO:exec(string statement); //statement爲待執行的Sql語句
返回執行後受影響的行數,通常用於insert、delete和update語句。
query方法
PDOStatement PDO::query(string statement); //statement爲待執行的Sql語句
返回PDOStatement對象。
預處理語句–prepare和execute
使用prepare預處理查詢語句,之後使用execute執行
PDOStatment PDO::prepare(string statement[,array driver_options]);
bool PDOStatement::excute([array input_parameters]);
PDO中獲取結果集
fetch方法
mixed PDOStatement ::fetch([int fetch_style[,int cursor_orientation[,int cursor_offset]]]);
fetch_style爲控制結果集的返回方式
fetch_style值 | 返回值形式 |
PDO::FETCH_ASSOC | 關聯數組 |
PDO::FETCH_NUM | 數字索引數組 |
PDO::FETCH_BOTH | 兩者數組形式都有(默認返回) |
PDO::FETCH_OBJ | 對象形式 |
PDO::FETCH_BOUND | 數字索引數組 |
PDO::FETCH_LAZY | 以關聯數組、數字索引數組、對象三種形式返回 |
cursor_offset:遊標的偏移量
使用方法如下:
<?php
$dsn = "mysql:host='localhost';port=3306;dbname='test'";
$user = "root";
$password = "";
try
{
$pdo = new PDO($dsn,$user,$password) //連接數據庫,連接失敗彈出異常
$query = "select * from user_message"; //sql查詢語句
$result = $pdo->prepare($query); //準備查詢語句
$result->excute(); //執行查詢語句並返回結果集
while($res = $result->fetch(PDO::FETCH_ASSOC)) //獲取查詢結果並輸出
echo $res['id'].$res[...];
}catch(PDOException $e){
die ("Error:".$e->getMessage()."<br>");
}
$pdo = NULL; //釋放連接
fetchAll方法
array PSOStatement::fetchAll([int fetch_style[,int column_index]]);
fetch_style:同fetch()方法中的fetch_style
column_index:字段的索引
返回一個包含結果集所有數據的二維數組,例如:$res[$i][‘id’]、$res[$i][…]等
fetchColumn方法
string PDOStatement::fetchColumn([int column_num]);
column_num:設置行中列的索引值,從0開始,若省略該參數,則從第一列開始取值。
返回值 :結果集中下一行中的指定列的值