1、連線資料庫
連線是通過建立 pdo 基類的例項而建立的。不管使用哪種驅動程式,都是用 pdo 類名。
<?php
$dbh
=new
pdo(
'mysql:host=localhost;dbname=test'
,$user
,$pass);
?>
帶錯誤處理方式的連線
<?php
try$dbh
=null;}
catch
(pdoexception$e)
?>
2、關閉連線
// 現在執行完成,在此關閉連線
$dbh
=null
;
3、連線的事務性
如果需要乙個事務,則必須用 pdo::begintransaction() 方法來啟動。如果底層驅動不支援事務,則丟擲乙個 pdoexception 異常(不管錯誤處理設定是怎樣的,這都是乙個嚴重的錯誤狀態)。
一旦開始了事務,可用 pdo::commit() 或 pdo::rollback()來完成,這取決於事務中的**是否執行成功。
注意: 只有通過 pdo::begintransaction() 啟動乙個事務後,才可能發生自動回滾。如果手動發出一條查詢啟動事務, 則 pdo 無法知曉,從而在必要時不能進行回滾。
在事務中執行批處理:
在下面例子中,假設為新員工建立一組條目,分配乙個為23的id。除了登記此人的基本資料之外,還需要記錄他的工資。
兩個更新分別完成起來很簡單,但通過封閉在 pdo::begintransaction() 和pdo::commit() 呼叫中,可以保證在更改完成之前,其他人無法看到這些更改。
<?php
trycatch
(exception$e)
trycatch
(exception$e)
?>
4、預處理
預處理的好處a、僅需預處理一次,但可以用相同或不同的引數執行多次。所以預處理語句占用更少的資源,因而執行得更快。b、提供給預處理語句的引數不需要用引號括起來,預處理語句,可以確保不會發生sql 注入。(然而,如果查詢的其他部分是由未轉義的輸入來構建的,則仍存在 sql 注入的風險)。
pdo::prepare — 準備要執行的sql語句並返回乙個 pdostatement 物件
語法:pdo::prepare ( string $statement [, array $driver_options = array() ] )
引數statement
合法的sql語句。
driver_options
此陣列包含乙個或多個 key=>value 對來設定 pdostatement 物件的屬性, 最常使用到是將pdo::attr_cursor值設定為pdo::cursor_scroll來請求乙個可滾動游標。
pdostatement::execute 執行一條預處理語句返回 true, 或者在失敗時返回 false。
語法:bool pdostatement::execute ([ array $input_parameters ] )
引數input_parameters
乙個元素個數和將被執行的 sql 語句中繫結的引數一樣多的陣列。所有的值作為 pdo::param_str 對待。
如果不帶input_parameters就必須用呼叫 pdostatement::bindparam() 繫結 php 變數到引數標記
使用乙個含有插入值的陣列執行一條預處理語句(命名引數)
<?php /* 通過傳遞乙個含有插入值的陣列執行一條預處理語句 */ ```php $calories = 150; $colour = 'red'; $sth = $dbh->prepare('select name, colour, calories from fruit where calories < :calories and colour = :colour'); $sth->execute(array(':calories' => $calories, ':colour' => $colour)); ?>
下面例子通過用 name 和 value 替代相應的命名佔位符來執行預處理語句進行重複插入
使用命名(:name)引數來準備sql語句 用bindparam邦定值
```php
<?php
$stmt = $dbh->prepare("insert into registry (name, value) values (:name, :value)");
$stmt->bindparam(':name', $name);
$stmt->bindparam(':value', $value);
// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();
// 用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>
注你不能在 sql 語句中同時包含命名(:name)或問號(?)引數標記,只能選擇其中一種風格。
使用問號佔位符的預處理語句
<?php
$stmt
=$dbh
->
prepare
("insert into registry (name, value) values (?, ?)");
$stmt
->
bindparam(1
,$name);
$stmt
->
bindparam(2
,$value);
// 插入一行
$name
='one'
;$value=1
;$stmt
->
execute()
;// 用不同的值插入另一行
$name
='two'
;$value=2
;$stmt
->
execute()
;?>
5、錯誤處理
通過設定 屬性attr_errmode的值為,pdo::errmode_exception
可能拖出更詳細的錯誤資訊
$dbh
->
setattribute
(pdo::
attr_errmode
,pdo::
errmode_exception
)
6、php pdo 大物件 (lobs)
可能需要在資料庫中儲存"大"資料,例如,具體參考菜鳥pdo 大物件
(1)pdo::setattribute — 設定屬性
(2)int pdo::exec ( string $statement ) — 執行一條 sql 語句,並返回受影響的行數常用在刪除操作中
(3)pdo::query — 執行 sql 語句,返回pdostatement物件,可以理解為結果集
(4)pdo::prepare — 準備要執行的sql語句並返回乙個 pdostatement 物件一般與(5,6)一起使用
(5)pdostatement::bindparam — 繫結乙個引數到指定的變數名
(6)pdostatement::execute — 執行一條預處理語句
PHP資料庫基於PDO操作類(mysql)
這是網上找的關於mysql的操作類,非常適合初學者使用 class mysql 連線資料庫的方法 protected function connect catch pdoexception e dbh exec set names utf8 self dbh dbh 欄位和表名新增 符號 保證指令中...
pdo資料庫操作類
pdo,有不侷限資料庫,和防止sql注入等很多優點,也是php官方推薦的方式,所以花點時間寫個pdo資料庫操作類 class pdox catch pdoexception e 關閉鏈結 public function closeconnect 轉義字串 param string return bo...
php的PDO連線資料庫(一)
php的pdo連線資料庫是乙個物件導向的資料庫的資料物件 之所以我選擇pdo連線資料庫是因為pdo適合任意的資料庫 而mysqli,只適合於mysql,沒有哪個好,哪個不好,哪個用得順手就用哪個。首先,我們當然要連線資料庫了。那麼pdo的連線資料庫有一條特定的語句就是 link new pdo my...