php 資料物件 (pdo) 擴充套件為php訪問資料庫定義了乙個輕量級的一致介面。
pdo 提供了乙個資料訪問抽象層,這意味著,不管使用哪種資料庫,都可以用相同的函式(方法)來查詢和獲取資料。
示意圖如下:
設定pdo的開啟狀態。在php.ini檔案中找到如下:
extension=php_pdo.dll //開啟pdo
extension=php_pdo_mysql.dll //pdo訪問mysql驅動
檢視是否成功開啟pdo,可以通過phpinfo函式。
pdo提供了三組類:pdo、pdostatement、pdoexception。分別為資料庫使用、預處理、異常
連線資料庫和異常處理**如下:
<?php結果://1.使用try、catch來進行錯誤處理。有專門的pdoexception異常類
trycatch (pdoexception $e
)?>
可以使用setattribute來設定屬性值。使用getattribute來獲取屬性值
在pdo操作sql有錯誤的情況下,提供了3中報錯的方式,如下:
( pdo::mysql_attr_init_command=>'set names utf8', //設定字符集編碼
pdo::attr_errmode=>pdo::errmode_exception //
注意 一定要寫這個,不如寫try catch 不會執行異常
);try
catch (pdoexception $e)//
增刪改try
else
}catch (pdoexception $e)//
如果是使用的預設模式,需要自己對結果進行判斷輸出
// $sql="insert into use4r1(name,password,email,age) values('hello',md5(456),'[email protected]',55);";
// $res=$_pdo->exec($sql);
// if (!$res)
?>
query()方法詳解:
設定字符集編碼($_pdo->query("set names utf8");)
獲取資料集(返回的不是結果集,而是預處理物件pdostatement)
查try
//----------一次性獲取所有的資料----------
// foreach ($stmt->fetchall()as $_row)
//-----------使用fetch方法,可以獲取結果集下一行------------------
// while (!!$_row=$stmt->fetch())
//-----------通過foreach迴圈來獲取每行的資料------------------
foreach ($stmt
as$_row)}
catch (pdoexception $e
) ?>
多次執行乙個查詢(prepare())
準備語句是使用兩個方法實現的:prepare()負責準備要執行的查詢,execute()使用一組給定的列引數返回地執行查詢。這些引數可以現實地作為陣列傳遞給 execute()方法,也可以使用通過 bindparam()方法指定的繫結引數提供給 execute()方法。
如果採用 prepare 和 execute
方法,還可以防止sql 注入等攻擊。因為所有的變數都會
被自動轉義。而如果採用 query()方法,將不具備這種保護,必須手動轉義,比如使用 pdo
裡的 quote()方法來轉義變數
<?phptry
catch (pdoexception $e
) //
$sql='';
// $sql="insert into user1(name,password,email,age) values('hi',md5(456),'[email protected]',55);";
$sql="update user1 set name='test_hhh' where id=3";
$stmt=$_pdo->prepare($sql
);
$stmt->execute();
//rowcount()獲取影響的行數,通過影響的行數判斷是否增刪改成功
if ($stmt->rowcount())
else
//獲取最後新增的id
// echo "新增的id為".$_pdo->lastinsertid();
?>
<?phptry
catch (pdoexception $e
) //
使用」?「號準備語句新增多條資料
$sql="insert into user1(name,password,email,age) values(?,?,?,?);";
$stmt=$_pdo->prepare($sql
);
$stmt->execute(array('aa','md5(456)','[email protected]','55'));
//使用」:名稱「號準備語句新增多條資料
$sql="insert into user1(name,password,email,age) values(:name,:password,:email,:age);";
$stmt=$_pdo->prepare($sql
);
$stmt->execute(array(':name'=>'abc',':password'=>'111',':email'=>'abc.qq.com',':age'=>'18'));
//結合繫結新增多條資料
$sql="insert into user1(name,password,email,age) values(:name,:password,:email,:age)";
$stmt=$_pdo->prepare($sql
);
$stmt->bindparam(':name', $name
);
$stmt->bindparam(':password', $password
);
$stmt->bindparam(':email', $email
);
$stmt->bindparam(':age', $age
);
$name='qwe';
$password='555';
$email='[email protected]';
$age='18';
$stmt->execute();
?>
<?phptry
catch (pdoexception $e
) //
ps:一定要注意定義error模式。不然不會執行try catch
$_pdo->setattribute(pdo::attr_errmode,pdo::errmode_exception );
try catch (pdoexception $e
) ?>
php資料庫抽象層 PDO
下面就來介紹一下資料庫抽象層pdo的使用 pdo php data objects 是乙個輕量級的php擴充套件,提供了乙個資料訪問抽象層。還要就是pdo只能在php5.0以上版本使用。下面來介紹一下pdo常用的預定義常量 pdo param bool integer 表示布林資料型別 pdo pa...
PHP 5資料物件 PDO 抽象層與Oracle
一名新 php 資料物件 pdo 資料抽象層的原始開發人員為您簡要介紹該抽象層,重點講述與 oracle 一起執行的情況。需要 php 5.0 需要其他 oracle 8 或更高版本客戶端庫 pdo 簡介 php 主要是由志願者完成的專案 儘管有少數一些固定的 核心 開發人員,但是我們沒有乙個人在全...
16 php資料庫抽象層PDO 五
mysql目前只有innodb和bdb兩個資料表型別才支援事務。建議用innodb表 create table employees type innodb 使用type指定表型別為innodb 在預設情況下,mysql是以自動提交 autocommit 模式執行的,這就意味著所執行的每乙個語句都將立...