php pdo操作mysql_PHP操作数据库详细(PDO)
PHP 5.1 發布時將附帶一個全新的數據庫連接層,即 PHP Data Objects (PDO)。雖然 PHP 一直都擁有很好的數據庫連接,但 PDO 讓 PHP的數據庫操作 達到一個新的高度。PDO可支持基本的MySQL、Microsoft SQL Server、Oracle等數據庫,并且提供了統一的操作方法,高度集成了數據庫操作。PDO的使用較好的解決項目開發過程中可能存在的數據庫更換問題。
PDO對數據庫的操作方法如增刪改查,進行了統一整合,但對原始的數據庫語句存在的差異,并不能完美的解決,比如MySQL的?limit 來查詢第 m 行到第 n 行的記錄使用 (select * from 表名 limit m, n),而Microsoft SQL Server則需要使用top命令的組合等。
此外,使用PDO的預處理函數prepare(),能很好的解決SQL注入問題。
支持的數據庫集合:
打開/連接數據庫:
1 <?php2 //error_reporting("E_ALL & ~ E_NOTICE");
3 echo '';//解決亂碼問題
4 $conn=false;5 //地址
6 $db_server = 'localhost';7 //端口
8 $db_port = '3306';9 //數據庫
10 $db_name = 'dbdong';11 //用戶
12 $db_user = 'root';13 //密碼
14 $db_password = 'root';15 //連接的dsn,每個數據庫都存在差異
16 $dsn = "mysql:host=$db_server;port=$db_port;dbname=$db_name";17 try{18 //連接數據庫 參數四(持久連接):array(PDO::ATTR_PERSISTENT => true)
19 $conn = new PDO($dsn, $db_user, $db_password);20 //設置字符集
21 $conn->query("set names utf8");22
23 echo "連接數據庫成功";24
25 } catch (PDOException $ex) {26 exit("不能連接數據庫".$ex);27 }
補充:
1 echo $conn->getAttribute(PDO::ATTR_SERVER_VERSION);//服務器數據庫版本
2 echo $conn->getAttribute(PDO::ATTR_CLIENT_VERSION);//客戶端數據庫版本
設置數據庫操作時錯誤模式:
1 /*
2 PDO::ATTR_ERRMODE:錯誤報告。3
4 1. PDO::ERRMODE_SILENT: 僅設置錯誤代碼。5
6 2. PDO::ERRMODE_WARNING: 引發 E_WARNING(警告) 錯誤7
8 3. PDO::ERRMODE_EXCEPTION: 拋出 exceptions 異常。catch (PDOException $ex)捕獲9
10 */
11 //獲取到當前設置的錯誤模式
12 echo $conn->getAttribute(PDO::ATTR_ERRMODE);13 //設置為警告模式,如果出現數據庫操作問題,會產生警告,推薦
14 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);15 //任意測試
16 $conn->exec("delete from xxx");
數據庫操作:
1、exec(“標準sql語句“) 用來處理非結果集的
//如insert、update、delete、create,返回為影響行數
2、query(“標準sql語句“,模式取值) 可用來處理所有語句
//返回結果集(select,desc),返回空(insert、updata……)
獲取結果的模式:
1 //查詢并全部輸出小例子
2 $xx=$conn->query("select * from c",PDO::FETCH_ASSOC);3 //一行一行拿數據
4 while($rowx=$xx->fetch()){5 //輸出
6 print_r($rowx);7 }
事物處理:
開始事物->提交事物
1 //設置錯誤模式為拋出異常
2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3 //開始事務
4 $conn->beginTransaction();5 try{6 $con=$conn->exec("update c set CN='222222'");7 $con=$conn->exec("update c sext PCNO='222222222222'");8 if($con<=0){9 //拋出異常
10 throw new PDOException("哇,我自己拋出異常");11 }12 //提交事務
13 $conn->commit();14
15 }catch(PDOException $ee){16 echo "-----------------------".$ee;17 //事務內部異常,操作全部撤銷
18 $conn->rollBack();19 }
預處理:
更新實現列子
1 //設置錯誤模式為拋出異常
2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3
4 try{5 //預處理SQL語句6 //?號占位符,必須從1下標開始7 //CNO=:name1 ,綁定參數時bindParam(":name1",$valuex);,名字不可相同
8 $res=$conn->prepare("update c set CN='dongxiaodong1' where CNO=?");9
10 //執行第一次11 //綁定參數1,參數是引用,所以需要是變量12 //參數三,確定類型:PDO::PARAM_INT,PDO::PARAM_STR等
13 $valuex="C1";14 $res->bindParam(1,$valuex);15 //執行處理1
16 $res->execute();17 //若兩次值相同,則影響行數為0
18 echo "影響的行數:".$res->rowCount();19
20 //執行第二次
21 $valuex="C3";22 $res->bindParam(1,$valuex);23 $res->execute();24
25 //執行第三次
26 $res->execute(array("C4"));27
28 }catch(PDOException $ee){29 echo "!!!!!!!!".$ee;30
31 }
查詢實現列子
1 //設置錯誤模式為拋出異常
2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3
4 try{5
6 //預處理SQL語句7 //?號占位符,必須從1下標開始8 //CNO=:name1 ,綁定參數時bindParam(":name1",$valuex);,名字不可相同
9 $res=$conn->prepare("select *from c where CN=:nam");10
11 //設置全局fetch獲取數據模式,模式參考上表,范圍$res以下12 //$res->setFetchMode(PDO::FETCH_NUM);
13
14 $res->execute(array("nam"=>"dongxiaodong"));15
16 echo "查詢到的總行數為:".$res->rowCount();17
18 //獲取單行:fetch(參數1),參數1可以更改返回模式,參考上面的模式表格19 //獲取全部:fetchall(參數1)
20 print_r($res->fetchall(PDO::FETCH_NUM));21
22 }catch(PDOException $ee){23 echo "!!!!!!!!!".$ee;24
25 }
總結
以上是生活随笔為你收集整理的php pdo操作mysql_PHP操作数据库详细(PDO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉——SIFT算法
- 下一篇: Dataset之LFW:LFW人脸数据库