三十 php之PDO抽象層 連線mysql

2022-02-07 03:46:42 字數 4292 閱讀 6516

php 資料物件 (pdo) 擴充套件為php訪問資料庫定義了乙個輕量級的一致介面。

pdo 提供了乙個資料訪問抽象層,這意味著,不管使用哪種資料庫,都可以用相同的函式(方法)來查詢和獲取資料。

示意圖如下:

設定pdo的開啟狀態。在php.ini檔案中找到如下:

extension=php_pdo.dll  //開啟pdo

extension=php_pdo_mysql.dll  //pdo訪問mysql驅動

檢視是否成功開啟pdo,可以通過phpinfo函式。

pdo提供了三組類:pdo、pdostatement、pdoexception。分別為資料庫使用、預處理、異常

連線資料庫和異常處理**如下:

<?php 

//1.使用try、catch來進行錯誤處理。有專門的pdoexception異常類

trycatch (pdoexception $e

)?>

結果:

可以使用setattribute來設定屬性值。使用getattribute來獲取屬性值

在pdo操作sql有錯誤的情況下,提供了3中報錯的方式,如下:

( pdo::mysql_attr_init_command=>'set names utf8',  //設定字符集編碼

pdo::attr_errmode=>pdo::errmode_exception //

注意 一定要寫這個,不如寫try catch 不會執行異常

);try

catch (pdoexception $e)//

增刪改try

else

}catch (pdoexception $e)//

如果是使用的預設模式,需要自己對結果進行判斷輸出

// $sql="insert into use4r1(name,password,email,age) values('hello',md5(456),'[email protected]',55);";

// $res=$_pdo->exec($sql);

// if (!$res)

?>

query()方法詳解:

設定字符集編碼($_pdo->query("set names utf8");)

獲取資料集(返回的不是結果集,而是預處理物件pdostatement)

查try

//----------一次性獲取所有的資料----------

// foreach ($stmt->fetchall()as $_row)

//-----------使用fetch方法,可以獲取結果集下一行------------------

// while (!!$_row=$stmt->fetch())

//-----------通過foreach迴圈來獲取每行的資料------------------

foreach ($stmt

as$_row)}

catch (pdoexception $e

) ?>

多次執行乙個查詢(prepare())

準備語句是使用兩個方法實現的:prepare()負責準備要執行的查詢,execute()使用一組給定的列引數返回地執行查詢。這些引數可以現實地作為陣列傳遞給 execute()方法,也可以使用通過 bindparam()方法指定的繫結引數提供給 execute()方法。

如果採用 prepare 和 execute

方法,還可以防止sql 注入等攻擊。因為所有的變數都會

被自動轉義。而如果採用 query()方法,將不具備這種保護,必須手動轉義,比如使用 pdo

裡的 quote()方法來轉義變數

<?php 

try

catch (pdoexception $e

) //

$sql='';

// $sql="insert into user1(name,password,email,age) values('hi',md5(456),'[email protected]',55);";

$sql="update user1 set name='test_hhh' where id=3";

$stmt=$_pdo->prepare($sql

);

$stmt->execute();

//rowcount()獲取影響的行數,通過影響的行數判斷是否增刪改成功

if ($stmt->rowcount())

else

//獲取最後新增的id

// echo "新增的id為".$_pdo->lastinsertid();

?>

<?php 

try

catch (pdoexception $e

) //

使用」?「號準備語句新增多條資料

$sql="insert into user1(name,password,email,age) values(?,?,?,?);";

$stmt=$_pdo->prepare($sql

);

$stmt->execute(array('aa','md5(456)','[email protected]','55'));

//使用」:名稱「號準備語句新增多條資料

$sql="insert into user1(name,password,email,age) values(:name,:password,:email,:age);";

$stmt=$_pdo->prepare($sql

);

$stmt->execute(array(':name'=>'abc',':password'=>'111',':email'=>'abc.qq.com',':age'=>'18'));

//結合繫結新增多條資料

$sql="insert into user1(name,password,email,age) values(:name,:password,:email,:age)";

$stmt=$_pdo->prepare($sql

);

$stmt->bindparam(':name', $name

);

$stmt->bindparam(':password', $password

);

$stmt->bindparam(':email', $email

);

$stmt->bindparam(':age', $age

);

$name='qwe';

$password='555';

$email='[email protected]';

$age='18';

$stmt->execute();

?>

<?php 

try

catch (pdoexception $e

) //

ps:一定要注意定義error模式。不然不會執行try catch

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

try catch (pdoexception $e

) ?>

php資料庫抽象層 PDO

下面就來介紹一下資料庫抽象層pdo的使用 pdo php data objects 是乙個輕量級的php擴充套件,提供了乙個資料訪問抽象層。還要就是pdo只能在php5.0以上版本使用。下面來介紹一下pdo常用的預定義常量 pdo param bool integer 表示布林資料型別 pdo pa...

PHP 5資料物件 PDO 抽象層與Oracle

一名新 php 資料物件 pdo 資料抽象層的原始開發人員為您簡要介紹該抽象層,重點講述與 oracle 一起執行的情況。需要 php 5.0 需要其他 oracle 8 或更高版本客戶端庫 pdo 簡介 php 主要是由志願者完成的專案 儘管有少數一些固定的 核心 開發人員,但是我們沒有乙個人在全...

16 php資料庫抽象層PDO 五

mysql目前只有innodb和bdb兩個資料表型別才支援事務。建議用innodb表 create table employees type innodb 使用type指定表型別為innodb 在預設情況下,mysql是以自動提交 autocommit 模式執行的,這就意味著所執行的每乙個語句都將立...