php資料庫類PDO的一些理解

2021-10-03 02:07:41 字數 3756 閱讀 3674

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...