日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php pdo操作mysql_PHP操作数据库详细(PDO)

發(fā)布時(shí)間:2023/12/20 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php pdo操作mysql_PHP操作数据库详细(PDO) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

PHP 5.1 發(fā)布時(shí)將附帶一個(gè)全新的數(shù)據(jù)庫連接層,即 PHP Data Objects (PDO)。雖然 PHP 一直都擁有很好的數(shù)據(jù)庫連接,但 PDO 讓 PHP的數(shù)據(jù)庫操作 達(dá)到一個(gè)新的高度。PDO可支持基本的MySQL、Microsoft SQL Server、Oracle等數(shù)據(jù)庫,并且提供了統(tǒng)一的操作方法,高度集成了數(shù)據(jù)庫操作。PDO的使用較好的解決項(xiàng)目開發(fā)過程中可能存在的數(shù)據(jù)庫更換問題。

PDO對數(shù)據(jù)庫的操作方法如增刪改查,進(jìn)行了統(tǒng)一整合,但對原始的數(shù)據(jù)庫語句存在的差異,并不能完美的解決,比如MySQL的?limit 來查詢第 m 行到第 n 行的記錄使用 (select * from 表名 limit m, n),而Microsoft SQL Server則需要使用top命令的組合等。

此外,使用PDO的預(yù)處理函數(shù)prepare(),能很好的解決SQL注入問題。

支持的數(shù)據(jù)庫集合:

打開/連接數(shù)據(jù)庫:

1 <?php2 //error_reporting("E_ALL & ~ E_NOTICE");

3 echo '';//解決亂碼問題

4 $conn=false;5 //地址

6 $db_server = 'localhost';7 //端口

8 $db_port = '3306';9 //數(shù)據(jù)庫

10 $db_name = 'dbdong';11 //用戶

12 $db_user = 'root';13 //密碼

14 $db_password = 'root';15 //連接的dsn,每個(gè)數(shù)據(jù)庫都存在差異

16 $dsn = "mysql:host=$db_server;port=$db_port;dbname=$db_name";17 try{18 //連接數(shù)據(jù)庫 參數(shù)四(持久連接):array(PDO::ATTR_PERSISTENT => true)

19 $conn = new PDO($dsn, $db_user, $db_password);20 //設(shè)置字符集

21 $conn->query("set names utf8");22

23 echo "連接數(shù)據(jù)庫成功";24

25 } catch (PDOException $ex) {26 exit("不能連接數(shù)據(jù)庫".$ex);27 }

補(bǔ)充:

1 echo $conn->getAttribute(PDO::ATTR_SERVER_VERSION);//服務(wù)器數(shù)據(jù)庫版本

2 echo $conn->getAttribute(PDO::ATTR_CLIENT_VERSION);//客戶端數(shù)據(jù)庫版本

設(shè)置數(shù)據(jù)庫操作時(shí)錯(cuò)誤模式:

1 /*

2 PDO::ATTR_ERRMODE:錯(cuò)誤報(bào)告。3

4 1. PDO::ERRMODE_SILENT: 僅設(shè)置錯(cuò)誤代碼。5

6 2. PDO::ERRMODE_WARNING: 引發(fā) E_WARNING(警告) 錯(cuò)誤7

8 3. PDO::ERRMODE_EXCEPTION: 拋出 exceptions 異常。catch (PDOException $ex)捕獲9

10 */

11 //獲取到當(dāng)前設(shè)置的錯(cuò)誤模式

12 echo $conn->getAttribute(PDO::ATTR_ERRMODE);13 //設(shè)置為警告模式,如果出現(xiàn)數(shù)據(jù)庫操作問題,會(huì)產(chǎn)生警告,推薦

14 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);15 //任意測試

16 $conn->exec("delete from xxx");

數(shù)據(jù)庫操作:

1、exec(“標(biāo)準(zhǔn)sql語句“) 用來處理非結(jié)果集的

//如insert、update、delete、create,返回為影響行數(shù)

2、query(“標(biāo)準(zhǔn)sql語句“,模式取值) 可用來處理所有語句

//返回結(jié)果集(select,desc),返回空(insert、updata……)

獲取結(jié)果的模式:

1 //查詢并全部輸出小例子

2 $xx=$conn->query("select * from c",PDO::FETCH_ASSOC);3 //一行一行拿數(shù)據(jù)

4 while($rowx=$xx->fetch()){5 //輸出

6 print_r($rowx);7 }

事物處理:

開始事物->提交事物

1 //設(shè)置錯(cuò)誤模式為拋出異常

2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3 //開始事務(wù)

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 //提交事務(wù)

13 $conn->commit();14

15 }catch(PDOException $ee){16 echo "-----------------------".$ee;17 //事務(wù)內(nèi)部異常,操作全部撤銷

18 $conn->rollBack();19 }

預(yù)處理:

更新實(shí)現(xiàn)列子

1 //設(shè)置錯(cuò)誤模式為拋出異常

2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3

4 try{5 //預(yù)處理SQL語句6 //?號占位符,必須從1下標(biāo)開始7 //CNO=:name1 ,綁定參數(shù)時(shí)bindParam(":name1",$valuex);,名字不可相同

8 $res=$conn->prepare("update c set CN='dongxiaodong1' where CNO=?");9

10 //執(zhí)行第一次11 //綁定參數(shù)1,參數(shù)是引用,所以需要是變量12 //參數(shù)三,確定類型:PDO::PARAM_INT,PDO::PARAM_STR等

13 $valuex="C1";14 $res->bindParam(1,$valuex);15 //執(zhí)行處理1

16 $res->execute();17 //若兩次值相同,則影響行數(shù)為0

18 echo "影響的行數(shù):".$res->rowCount();19

20 //執(zhí)行第二次

21 $valuex="C3";22 $res->bindParam(1,$valuex);23 $res->execute();24

25 //執(zhí)行第三次

26 $res->execute(array("C4"));27

28 }catch(PDOException $ee){29 echo "!!!!!!!!".$ee;30

31 }

查詢實(shí)現(xiàn)列子

1 //設(shè)置錯(cuò)誤模式為拋出異常

2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3

4 try{5

6 //預(yù)處理SQL語句7 //?號占位符,必須從1下標(biāo)開始8 //CNO=:name1 ,綁定參數(shù)時(shí)bindParam(":name1",$valuex);,名字不可相同

9 $res=$conn->prepare("select *from c where CN=:nam");10

11 //設(shè)置全局fetch獲取數(shù)據(jù)模式,模式參考上表,范圍$res以下12 //$res->setFetchMode(PDO::FETCH_NUM);

13

14 $res->execute(array("nam"=>"dongxiaodong"));15

16 echo "查詢到的總行數(shù)為:".$res->rowCount();17

18 //獲取單行:fetch(參數(shù)1),參數(shù)1可以更改返回模式,參考上面的模式表格19 //獲取全部:fetchall(參數(shù)1)

20 print_r($res->fetchall(PDO::FETCH_NUM));21

22 }catch(PDOException $ee){23 echo "!!!!!!!!!".$ee;24

25 }

總結(jié)

以上是生活随笔為你收集整理的php pdo操作mysql_PHP操作数据库详细(PDO)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。