為什麼要講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 ...