PDO 資料庫抽象管理層

2021-08-07 22:25:30 字數 4106 閱讀 1135

需求:手裡有乙個大專案,需要支援多種資料庫(oracle,

mysql

),採用物件導向的方式去實現。分成兩個團隊進行不同資料庫的支援。

上面的管理方式是直接使用php的源**去管理不同的資料庫,

php後來增加了乙個中間層來管理不同的資料庫(

pdo),

php指令碼只需要去操作

pdo就能夠實現對不同資料庫的操作。

1. 什麼是pdo?

pdo:

php data object

,php

資料物件,也叫

php資料抽象層,是一種能夠管理多種不同資料庫的資料物件,

php只需要去呼叫

pdo,而不用去在意

pdo底層管理的資料庫到底是採用什麼樣的方式,哪些方法來實現的功能。讓

php運算元據庫變得簡單。

pdo不止是乙個類:而是三個類:

pdo類,

pdostatement

類,pdoexception類

pdo類:主要

負責資料庫的連線操作以及初始化

,能夠向伺服器傳送sql語句

pdostatement類:負責處理所有

有結果的資訊

pdoexception類:

異常處理類,獲取對應可能出錯的錯誤資訊

,然後採用物件的形式去處理錯誤

1. 開啟擴充套件:pdo本身的擴充套件(高版本的

php預設是開啟的),

pdo對應資料庫的擴充套件

2. 指定擴充套件路徑

3. 重啟apache生效

1. 連線認證

new pdo():得到乙個

pdo類的物件,這個物件就可以呼叫

pdo類的所有方法

三個引數

$dsn:資料庫型別

:host=

主機位址

;port=

埠號;dbname=

資料庫

$user:使用者名稱

$pass:密碼

2. 準備sql語句,傳送給伺服器,得到的伺服器執行後的結果

必須區分sql語句到底是什麼操作:寫操作使用

exec

,讀操作使用

query

pdostatement query:將結果得到之後,返回乙個

pdostatement

類的物件,因為

pdostatement

類是專門用於資料操作的。

3. 解析資料:通過pdostatement類物件來實現獲取對應的資料

在pdostatement類中,提供了一系列的

fetch

方法來獲取資料

fetch:獲取查詢結果中的一條記錄,同時會將操作指標下移

解析資料方法:pdostatement類提供的方法

fetch:從結果中獲取一行記錄,預設返回乙個混合陣列

fetch_style:

fetchall:取得所有的結果,形成乙個二維陣列

fetchobject:將資料獲取到乙個物件裡面

bindcolumn:將指定列的資料繫結到乙個外部變數,然後在資料

fetch

操作的時候,會將對應列的資料,直接放到對應的變數當中,然後可以通過直接使用變數相當於操作對應的字段的值。

bindcolumn

必須配合

fetch_style

的pdo::fetch_bound

先將乙個變數繫結到對應的「結果集」;然後再進行獲取資料

注意:繫結如果是採用索引進行繫結,索引從1開始表示第一列

修改查詢模式:setfetchmode,可以一次性修改所有的

fetch

模式,以後都可以按照指定的模式進行

fetch

就可以了。

任何的sql語句都有可能執行錯誤,

sql的錯誤處理模式都是靜默模式,出了錯也不會報錯,需要對

sql的執行結果進行錯誤的處理。

pdo::errorcode:獲取錯誤**

pdo::errorinfo:獲取錯誤資訊

預處理:提前處理,在一次資料庫連線過程中,可以提前將要執行的sql語句傳送給伺服器,但是暫時不執行,等到需要執行的時候再去執行。

1. 準備預處理:將要執行的sql語句起個別名然後傳送給伺服器。

prepare 預處理名字

from 『要執行的sql語句』;

2. 執行預處理。

execute 預處理名字;

預處理使用引數

1. 準備預處理:有些地方可以事先使用佔位符「?

」來代替真實資料。

2. 如果預處理有引數的話,那麼必須攜帶引數。引數必須是通過變數傳入。

execute 預處理名字

using 變數;

節省頻寬(執行一次較長的sql語句,每次使用的時候都只需要提供變數)

1. 傳送預處理語句

$stmt=$pdo->prepare($sql) //獲取

pdostatement物件

2. 執行預處理(如果要傳引數時傳遞陣列

)  引數分為索引陣列(?)和關聯陣列

(:name)

$stmt->excute();  //pdostatement物件的方法

注意:在使用pdo進行預處理的時候,盡量不要使用問號佔位符,使用變數(

:名字)

pdo的事務處理完全遵照

mysql

下面的事務處理來實現,只是將不同的動作封裝到不同的方法中。

事務流程

1. 開啟事務

2. 事務處理:進行多次有關聯的寫操作

3. 結束事務

a) 成功:commit方法

b) 失敗:rollback方法

注意:要支援事務,必須要爭資料庫的儲存引擎是innodb(才支援事務)。

pdo屬性不是指的

pdo類的物件裡面所儲存的屬性,而是指的

pdo物件在運算元據的過程中應該按照某些指定的情況去處理資料。

pdo屬性不是真正的

pdo類物件的屬性,是資料庫的屬性

對於屬性操作:pdo提供兩個方法,

getattribute

獲取屬性的值,和

setattribute

設定屬性的值。

這些屬性都是以屬性名和屬性值的鍵值對的形式存在

pdo::attr_autocommit:是否自動提交,預設都是自動提交,值是1

pdo::attr_case,代表資料庫返回資料的時候,欄位的大小寫,預設是與資料庫字段設計的大小寫一致

pdo::case_natural

pdo::case_lower:全部字段小寫(欄位名)

pdo::case_upper:全部大寫

pdo::case_natural,預設自然的,不改變

修改屬性

pdo::attr_errmode,

mysql

對出錯的處理模式

pdo::errmode_silent:預設的,靜默模式,出錯不會報錯

pdo::errmode_warning:警告模式,出錯會給出乙個警告

pdo::errmode_exception:異常模式,出錯會丟擲乙個異常

pdo::attr_persistent,連線的永續性,預設的是

false

,短連線

true:長連線,指令碼執行結束,如果換乙個指令碼依然需要運算元據庫,連線不會中斷

條件:mysql伺服器開啟長連線(預設不允許),

apache

支援長連線(需要配置)

false:短連線,指令碼執行結束一定會釋放(斷開)連線資源

異常其實錯誤,異常處理是一種將錯誤放到乙個對應的物件裡面,然後通過物件去對錯誤進行操作一種模式。

異常處理的實現語法

將所有有可能出現錯誤的語句,都放到乙個可以抓取異常的上下文:try;其次需要乙個指定型別的資料類的物件來捕獲異常,並進行異常處理:

catch

trycatch(異常處理類 物件名字){

//錯誤處理的方式

要使用異常模式來抓取pdo可能出現的錯誤,那麼必須將

錯誤處理模式設定成異常模式

資料庫抽象層 PDO

資料庫抽象層 在資料遷移和專案操作多資料庫時,為了便於操作而提供一種的解決方案。當從乙個資料庫系統向另乙個資料庫系統遷移時,幾乎不用更改太多的程式 如將ms sql server遷移到mysql。規劃必須規範,盡量使用相同的資料進行物件例項化,並且使用相同的資料庫抽象層 如pdo 這樣只需要改變系統...

PDO資料庫訪問抽象層

pdo建構函式說明 dsn資料來源名稱,包括主機名埠號和資料庫名稱 username資料庫使用者名稱 password 密碼 driver options連線資料庫的其他選項 pdo是比mysql更高效,資料庫遷移時基本不用更改太多的 sql語句 pdo exec 返回sql語句後受影響的行數 qu...

初識PDO資料庫抽象層

就是運算元據庫的方法,pdo就是把運算元據庫的函式封裝成乙個pdo類,其間做了安全驗證而已。果要開啟某個pdo直接在php.ini當中啟用即可。直接將分號去除即可 詳細的開啟服務可以在phpinfo下面查詢即可。mysql連線資料庫的方式是 mysql connect localhost root ...