PDO概念及總結

2021-07-30 07:52:42 字數 4633 閱讀 6775

為什麼要講pdo:

(1)市面上使用最多的,大部分企業使用pdo

(2)mysqli  只支援mysql

資料庫,pdo支援大部分資料庫

(3)以後做的專案都是使用pdo作為資料庫抽象層來實現的

mysqli------是mysql資料庫的加強:

(預處理機制)

(錯誤處理機制)

(採用了物件導向的程式設計模式)

一、php如何運算元據庫

與具體資料庫的擴充套件:php想操作那個資料庫,需要開啟這個資料庫的擴充套件,提供操作這個資料庫的函式

二、什麼是pdo

pdo是乙個mysql官方封裝的,基於物件導向程式設計思想的,使用c語言開發的資料庫抽象層

三、pdo資料庫抽象的概念:

pdo

抽象類

它是封裝的乙個類,就是乙個控制資料庫的新的操作方法

將具體的運算元據庫的**封裝到資料庫抽象層,如果出項資料庫轉移,只需在php**裡高速資料庫抽象層,你去使用哪乙個資料庫就可以了

通過**引出pdo

<?php //

寫乙個函式,根據傳遞的引數來操作不同的資料庫

function 

mysql_db(

$type

)elseif 

($type

=='mssql'

)elseif 

($type

=='oracle')}

mysql_db('mysql');

function 

mysql_q(

$type

,$sql)}

?>

一、     

如何使用

pdo

和當前使用

mysql

非常像

要想使用

mysql

需要開啟

mysql

擴充套件,

需想使用

pdo,需要開啟

pdo擴充套件

獲得

pdo物件,呼叫方法

(1)要開啟

pdo驅動

extension = php_pdo.dll

extension = php_pdo_sqlite.dll

extension = php_pdo_mysql.dll

開啟這個擴充套件(驅動),就可以使用這個擴充套件給我們提供類了 (

2)使用這個類,例項化這個類,呼叫屬性和方法

<?php //

使用pdo

運算元據庫 //

第乙個引數:連線資料庫的型別:主機名;資料庫名

$dsc 

= 'mysql:host=localhost;dbname=mysql_text';

$user 

= 'root';

$pass 

= '123';

$pdo 

= new 

pdo(

$dsc

,$user

,$pass

);//

例項化乙個類的時候,會自動的先呼叫

__construct()

建構函式

//var_dump($pdo);

//執行

sql語句獲得

$sql 

= 'select*fromgoods';

$result 

= $pdo

->query(

$sql

);//query

方法返回的是

pdostatement物件

//如果想獲得具體的資料,需要呼叫物件的方法:

fetchall();

引數是類常量,表示返回什麼樣的資料

$rows 

= $result

->fetchall(pdo::fetch_both);

//var_dump($rows);

//更新資料庫的操作

$sql 

= 'update goods set goods_name="lalala" wheregoods_id=3';

//執行增刪改的語句

,exec()

方法,執行查詢的語句

query()

//exec()

返回受影響的函式

query()返回

pdostatement物件

$nums 

= $pdo

->exec(

$sql);

var_dump($nums);

?>

二、     

pdo預編譯機制

先將sql

語句的資料部分和費資料部分分離開————》將不帶資料的部分預編譯一下

prepare

()————》在編譯結果上繫結資料

bandparam()

————》執行編譯結果

execute()

預編譯的好處:

1、減少了編譯的字元數,編譯的速度提高

2、如果再次執行同樣的

sql語句,直接繫結資料,減少編譯

sql語句時間

寫**實現

pdo的預編譯(與處理機制)

<?php //

預編譯:

pdo::prepare($sql);   

返回pdostatement物件

//繫結資料

pdostamentt->bindparam();  

給預編譯的結果繫結資料 //

執行編譯結果

pdostament->execute();

//使用

pdo運算元據庫 //

第乙個引數:連線資料庫的型別:主機名;資料庫名

$dsn  

= 'mysql:host=localhost;dbname=mysql_text';

$user 

= 'root';

$pass 

= '123';

$pdo 

= new 

pdo(

$dsn

,$user

,$pass);

//var_dump($pdo);

//預編譯:

prepare();

引數是不帶資料的

sql語句 //

先將sql

語句中的資料部分用佔位符代替

:佔位符名稱

$sql 

= 'insert intogoods values(null,:name,:price,:number)';

$smt 

= $pdo

->prepare(

$sql

);  

//返回乙個

pdostament 物件

//繫結資料

pdostament

物件的bindparam()

來繫結引數:佔位符,實際資料

$goods_name

= 'su***ce';

$goods_price

= '3500';

$goods_num

= '41';

$smt

->bindparam(

':name'

,$goods_name);

$smt

->bindparam(

':price'

,$goods_price);

$smt

->bindparam(

':number'

,$goods_num);

$smt

->execute();

?>

三、     

pdo的錯誤處理機制:(1

)靜默模式

預設情況下與

mysql

處理方式一致,不現實錯誤資訊(靜默模式)但是我們可以通過固定的方法獲得錯誤資訊 (

2)警告模式

//更改屬性設定錯誤處理模式

$pdo ->setattribute(pdo::attr_errmode,pdo::errmode_warning);(3

)異常模式,當發生錯誤時,丟擲乙個異常

$pdo 

->setattribute(pdo::attr_errmode,pdo::errmode_exception);

$sql 

= 'select*fromgood';

try 

catch 

(pdoexception 

$e){ //

現在捕獲異常後,自己看著辦,是讓他顯示出來呢,還是輸出到日誌檔案裡呢? //

通常是將錯誤資訊輸出到日誌檔案裡

var_dump($e

->getmessage());

file_put_contents('d:',$e

->getmessage());

LVS概念及演算法總結

lvs linux virtual server 四層排程器 靜態排程演算法 起點公平,針對短連線起作用 輪詢 加權輪詢,適合短連線無狀態 動態排程演算法 結果公平,針對長連線起作用 最少連線,加權最少連線 靜態排程演算法 rr 輪詢 wrr 加權輪詢 1.source ip hashing 一般地...

今日總結 JDBC概念及常見元件

概念 jdbc 指 j a 資料庫連線,是一種標準j a應用程式設計介面 j a api 用來連線 j a 程式語言和廣泛的資料庫。jdbc 的 api 提供了以下介面和類 drivermanager 這個類管理一系列資料庫驅動程式。匹配連線使用通訊子協議從 j a 應用程式中請求合適的資料庫驅動程...

回歸測試相關概念及經驗總結

最近發現隨著流程越來越規範,測試的比重變得越來越大。特別是做回歸測試的時候,經常會耗費相當大的人力物力,卻不得到理想的結果。所以網上收集了關於回歸測試 的一些知識做一下總結。1 測試用例庫的維護 測試用例的維護是乙個不間斷的過程,通常可以將軟體開發的基線作為基準,維護的主要內容包括下述幾個方面。1 ...