PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口。PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数,基于数据库使用的安全性,因为后者欠缺对于SQL注入的防护。
PHP数据对象(PDO)扩展为PHP访问数据库定义了一个轻量级的一致接口。实现PDO接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。注意利用PDO扩展自身并不能实现任何数据库功能;必须使用一个具体数据库的PDO驱动来访问数据库服务。
PDO提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。PDO不提供数据库抽象层;它不会重写SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
PHP连接数据库,为什么要用PDO的方式来连接:
1、更换数据库时取得极大便利
2、极大提高程序运行效率
根据PHP官方计划,PHP6正式到来之时,数据库链接方式统一为PDO。但是总有一小撮顽固分子,趁PHP官方还没正式统一时,还用老式的MYSQL驱动链接数据库。即使现在有部分程序改用Mysqli/pdo,只要没用到预编译,均和老式的Mysql驱动没多大区别。在此,我就不点评国内的PHP生态环境了。
回归主题,为什么说PHP必须要用PDO?除了官方要求之外,我认为作为PHP程序员,只要你目前是做开发的话,那么请选择用PDO的程序/框架!PDO除了安全和万金油式数据库链接,还有一点是我目前觉得非常好用的!下面我就用我最近的切身体会来说。
业务环境:公司某老架构,数据库设计的人员太菜了,设计过程完全没有按照数据库范式进行。各种表中使用大量的序列化形式保存(补充:json同理)。
出现问题:销售的客服反馈,网站某用户在编辑地址时,Mysql报错了。
问题猜想:不用说了。肯定是引号,反斜杠引起序列化入库不正常。
一下是使用PHP中使用PDO连接数据的方式:
{pboot:pre}
<?php echo '<meta charset="utf-8">'; try{ //创建对象 $pdo = new PDO('mysql:host=localhost;dbname=xsphp','root','123456'); //设置错误使用异常的模式 $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //关闭自动提交 // $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0); }catch(PDOException $e){ echo '数据库连接失败:'.$e->getMessage(); exit; } try{ //只是将这个语句放到服务器上(数据库管理系统上),编写后等待,没有执行 $stmt = $pdo->prepare('insert into mm(name,age) values(?,?)'); //绑定参数(?),将问号和一个变量关联起来 $stmt -> bindParam(1,$name); $stmt -> bindParam(2,$age); //给变量一个值,就会给准备好的语句中的对应?一个值 $name = 'wusn'; $age = 21; //执行上面在数据库系统中准备好的语句 $stmt -> execute(); // $pdo -> commit(); }catch(PDOException $e){ echo '错误消息为:'.$e-> getMessage(); }
{/pboot:pre}
以上是苏州网站建设整理代码,写的比较简陋,敬请谅解!