使用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>'; }
頁面輸出的結果如下圖:
pdo連接資料庫成功
由于資料庫服務器只是特定的埠上監聽連接請求,每種資料庫服務器具有一個默認的埠號(MySQL 是3306),但是資料庫管理員可以對埠號進行修改,因此有可能 PHP找不到資料庫的埠號,此時就可以在 DSN中包含埠號,比如:
$dsn="mysql:host=127.0.0.1;port=3306;dbname=admin";
PDO中獲取結果集之fetch()方法詳解
首先創建一個php檔案,通過 PDO連接MySQL資料庫,然后定義 SELECT查詢陳述句,應用prepare()和execute()方法執行查詢操作,接著,通過fetch()方法回傳結果集中下一行資料沒同事設定結果集以關聯陣列形式回傳,最后通過 while陳述句完成資料的回圈輸出,具體代碼如下:
$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','[email protected]')"; $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>'; }
注意:
1、query和exec都可以執行所有的sql陳述句,只是回傳值不同而已,
2、query可以實作所有exec的功能,
3、當把select陳述句應用到 exec 時,總是回傳 0
4、如果要看查詢的具體結果,可以通過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','[email protected]')"; $res = $pdo->prepare($query); $res->execute(); if($res->errorCode()){ echo '資料添加成功'; }else{ echo '資料添加失敗'; } //事務提交 $pdo->commit(); }catch(PDOException $e){ die($e->getMessage().'<br>'); //事務回滾 $pdo->rollBack(); }
最后輸出的結果如下:資料添加成功
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/33644.html
標籤:PHP
上一篇:php連接和操作mysql資料庫
下一篇:PHP正則運算式語法匯總
