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注入问题。

支持的数据库集合:

1d5dcf2550d0df0e3298e151592e7999.png

打开/连接数据库:

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……)

获取结果的模式:

e9c0cdff33a0db28a68e87db37811e68.png

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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值