PHP PDO mysql抽象層

使用PDO構造函數鏈接數據庫及DSN詳解

<?php $dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbName=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); echo 'pdo鏈接數據庫成功'; }catch(Exception $e){ echo $e->getMessage().'<br>'; }

頁面輸出的結果以下圖:php

pdo鏈接數據庫成功

 

因爲數據庫服務器只是特定的端口上監聽鏈接請求。每種數據庫服務器具備一個默認的端口號(MySQL 是3306),可是數據庫管理員能夠對端口號進行修改,所以有可能 PHP找不到數據庫的端口號,此時就能夠在 DSN中包含端口號。好比:mysql

$dsn="mysql:host=127.0.0.1;port=3306;dbname=admin";

 

PDO中獲取結果集之fetch()方法詳解

首先建立一個php文件,經過 PDO鏈接MySQL數據庫,而後定義 SELECT查詢語句,應用prepare()和execute()方法執行查詢操做,接着,經過fetch()方法返回結果集中下一行數據沒同事設置結果集以關聯數組形式返回,最後經過 while語句完成數據的循環輸出,具體代碼以下:sql

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "SELECT * FROM user"; $res = $pdo->prepare($query); $res->execute(); while($result = $res->fetch(PDO::FETCH_ASSOC)){ echo $result['username'].' '.$result['password'].' '.$result['email'].'<br>'; } }catch(Exception $e){ echo $e->getMessage().'<br>'; }

 

PDO中獲取結果集之fetchAll()方法詳解

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "SELECT * FROM user"; $res = $pdo->prepare($query); $res->execute(); $result = $res->fetchAll(PDO::FETCH_ASSOC); for($i=0;$i<count($result);$i++){ echo $result[$i]['username'].' '.$result[$i]['password'].' '.$result[$i]['email'].'<br>'; } }catch(Exception $e){ echo $e->getMessage().'<br>'; }

 

PDO中獲取結果集之fetchColumn()方法詳解

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "select * from user"; $res = $pdo->prepare($query); $res->execute(); echo $res->fetchColumn(0).'<br>';//返回id
    echo $res->fetchColumn(0).'<br>'; echo $res->fetchColumn(0).'<br>'; }catch(Exception $e){ echo $e->getMessage().'<br>'; }

 

PDO中執行SQL語句的三種方法

第一種方法:exec()方法數據庫

該方法返回執行SQL 語句時受影響的行數,一般用於 INSERT,DELETE和UPDATE語句中。數組

<?php $dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "INSERT INTO user(username,password,confirm,email) VALUES('cyy01','123','123','965794175@qq.com')"; $res = $pdo->exec($query); echo '插入成功,受影響的行數爲:'.$res; }catch(Exception $e){ echo $e->getMessage().'<br>'; }

 

第二種方法:query()方法服務器

query()方法用於返回執行查詢後的結果集函數

<?php 
$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "SELECT * FROM user"; $res = $pdo->query($query); print_r($res); }catch(Exception $e){ echo $e->getMessage().'<br>'; }

 

注意:測試

一、query和exec均可以執行全部的sql語句,只是返回值不一樣而已。fetch

二、query能夠實現全部exec的功能。spa

三、當把select語句應用到 exec 時,老是返回 0

四、若是要看查詢的具體結果,能夠經過foreach語句完成循環輸出

 

第三種種方法:預處理語句:prepare()語句和execute()語句

還能夠經過bindParam()方法來綁定參數給execute()方法

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "SELECT * FROM user"; $res = $pdo->prepare($query); $res->execute(); while($result = $res->fetch(PDO::FETCH_ASSOC)){ echo $result['id']." ".$result['username']." ".$result['password'].'<br>'; } }catch(Exception $e){ echo $e->getMessage().'<br>'; }

 

使用默認模式-PDO::ERRMODE_SILENT(PDO中捕獲SQL語句中的錯誤方法一)

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "insert into `user_12`(username,password) VALUES ('cyy02','123')"; $res = $pdo->prepare($query); $res->execute(); $code = $res->errorCode(); if(empty($code)){ echo '插入成功'; }else{ var_dump($res->errorInfo()); } }catch(Exception $e){ echo $e->getMessage().'<br>'; }

注意:

在上面的代碼中,在定義 INSERT 添加語句的時候,故意使用了錯誤的數據表名字user_12(正確的數據表名稱是:user),這裏是爲了測試寫的!

致使錯誤輸出結果以下:

 

 

使用警告模式-PDO::ERRMODE_WARNING(PDO中捕獲SQL語句中的錯誤方法二)

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); //設置爲警告模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); $query = "select * from user_12"; $res = $pdo->prepare($query); $res->execute(); while($result = $res->fetch(PDO::FETCH_ASSOC)){ echo $result['username']; }
  echo '程序可以繼續執行哦~'; }
catch(Exception $e){ echo $e->getMessage().'<br>'; }

注意:

在上面的代碼中,在定義 SELECT 查詢語句的時候,咱們故意使用了錯誤的數據表名字user_12(正確的數據表名稱是:user),這裏是爲了測試寫的!

在設置爲警告模式之後,若是SQL 語句出現錯誤將會給出一個提示信息,可是程序仍然能繼續執行下去,上面實例獲得的結果以下圖:

 

 

使用異常模式-PDO::ERRMODE_EXCEPTION(PDO中捕獲SQL語句中的錯誤方法三)

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); //設置爲異常模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $query = "delete * from user_12 where id = :id"; $res = $pdo->prepare($query); $id = 5; $res->bindParam(':id',$id); $res->execute(); }catch(PDOException $e){ echo 'error:'.$e->getMessage().'<br>'; echo 'code:'.$e->getCode().'<br>'; echo 'file:'.$e->getFile().'<br>'; echo 'line:'.$e->getLine().'<br>'; echo 'trace:'.$e->getTraceAsString().'<br>'; }

注意:

在上面的代碼中,在定義 DELETE 刪除語句的時候,咱們故意使用了錯誤的數據表名字user_12(正確的數據表名稱是:user),這裏是爲了測試寫的!

在設置爲異常模式後,執行錯誤的SQL語句,輸出結果以下:

PDO中錯誤處理的方法一-errorCode()方法

在PDO中有兩個獲取程序中錯誤信息的方法:errorCode()方法和errorInfo()方法!

$dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "DELETE FROM user_12"; $res = $pdo->query($query); echo $pdo->errorCode().'<br>'; }catch(PDOException $e){ echo $pdo->errorCode().'<br>'; echo $e->getMessage().'<br>'; }

運行結果以下:

 

 

PDO中錯誤處理的方法二-errorInfo()方法

<?php $dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); $query = "DELETE FROM user_12"; $res = $pdo->query($query); print_r($pdo->errorInfo()); }catch(PDOException $e){ echo $pdo->errorCode().'<br>'; echo $e->getMessage().'<br>'; }

輸出的結果以下圖所示:

 

 

PDO中的事務處理

(1) 開啓事務——beginTransaction()方法。

beginTransaction()方法將關閉自動提交(autocommit)模式,直到事務提交或者回滾之後才恢復。

(2)提交事務——commit()方法

commit()方法完成事務的提交操做,成功返回true,不然返回false。

(3)事務回滾——rollBack()方法

rollBack()方法執行事務的回滾操做。

<?php $dbms = 'mysql'; $dbname = 'test'; $user = 'root'; $pwd = '123456'; $host = 'localhost'; $dsn = "$dbms:host=$host;dbname=$dbname"; try{ $pdo = new PDO($dsn,$user,$pwd); // 開啓事務
    $pdo->beginTransaction(); $query = "insert into user(username,password,confirm,email) VALUES ('cyy03','333','333','965794175@qq.com')"; $res = $pdo->prepare($query); $res->execute(); if($res->errorCode()){ echo '數據添加成功'; }else{ echo '數據添加失敗'; } //事務提交
    $pdo->commit(); }catch(PDOException $e){ die($e->getMessage().'<br>'); //事務回滾
    $pdo->rollBack(); }

最後輸出的結果以下:數據添加成功

相關文章
相關標籤/搜索