pdo mysql 教程_PDO入门教程

什么是PDO?

我不给大家讲定义,就是给大家我的看法,我认为PDO就是PHP官方提供的、面向对象的、用来操作数据库的扩展。PDO不单可以访问Mysql,好像一般 的数据库都行,只要装上对应的扩展就可以了,一般用PHP的都是Mysql,所以我只装了Mysql的。

如何如何安装PDO?

和安装别的PHP扩展一样,windows简单,在php.ini载入对应的dll文件就行了。linux还要麻烦一点,需要编译一下。

为什么要使用PDO?

首先它是面向对象的,面向对象的好处不必多说。

其次PDO用起来方便、安全,很多时候是会自动过滤特殊符号的,就不必你操心了。

PDO为多种数据库的访问提供同样的接口,以后网站要换个数据库就方便很多,也不用学习其他类了。

PDO的使用方法简介:

建议:使用PDO,可把magic_quotes_gpc设置关闭,使用PDO本身过滤字符串的功能。

第一步、创建PDO实例代码形式:$obj = new PDO('mysql:host=localhost;dbname=数据库名' , 用户名 , 密码);

代码示例:$obj = new PDO('mysql:host=localhost;dbname=localhost' ,  'root'  ,  '123456');

这样我们就有了一个PDO的实例了,也就可以使用该实例的对应方法了

第二步、设置参数

代码形式: $obj ->setAttribute(参数名称 , 参数值);

代码示例: $obj->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

示例的意思就是说,当PDO执行出现错误的时候以抛出异常的形式报错,个人建议用这样的方式,然后把所有数据库操作放在try里,非常方便,不懂可以去看PHP异常处理方面的文章。

PDO的设置的参数有:

PDO::ATTR_CASEPDO::ATTR_ERRMODEPDO::ATTR_ORACLE_NULLSPDO::ATTR_STRINGIFY_FETCHESPDO::ATTR_STATEMENT_CLASSPDO::ATTR_AUTOCOMMIT

PDO::MYSQL_ATTR_USE_BUFFERED_QUERY

PDO::ATTR_DEFAULT_FETCH_MODE 等由于篇幅限制,各个参数都代表什么,都可以设置什么值,我就不一一介绍了,找本手册,上面有。

第三步、执行一般操作

代码形式: $obj ->exec(SQL语句);

代码示例: $obj ->exec('SET NAMES UTF8');

这个函数会返回受影响的行数。

第四步、特殊字符过滤

当您自己构造SQL语句,就需要将一些敏感的字符过滤一下,就是类似AddSlashes函数。

代码形式: 过滤后的字符串 = $obj ->quote(字符串);

第五步、PDOStatement操作

PDOStatement是另一个类,其实例可以由PDO实例的prepare或query方法生成,通常我们操作数据库都是用这个类,而不是直接用PDO类,这个类方法很完善,也很安全。

例如,我们现在创建一个PDOStatement可以这样($obj 为PDO实例):

$ps = $obj->prepare("SELECT * FROM `article` WHERE `id` = 1");

这个时候,$ps就是一个 PDOStatement类的实例,我们就可以使用对应的方法了。prepare函数执行之后,其实并没有向数据库提交任何请求,也就是说sql语句还没 有执行,只是“准备”好了一个SQL语句,你需要调用$ps 的 execute方法,才真正的执行,

所以我们要这样:$ps->execute();

而PDO的query方法,就相当于先prepare,得到实例后再execute,

所以,如果代码这样写($obj 为PDO实例):

$ps = $obj->query("SELECT * FROM `article` WHERE `id` = 1");

这样就不用再执行execute了,SQL语句已经被执行了,但这个方法和prepare方法一样,都返回一个PDOStatement类的实例。

既然PDO实例的prepare方法比query方法要多一步,为什么不直接用query呢?parepare还有什么用呢?

用处可大了,事实上我们大多数情况,都是用prepare,而不是query,原因就是prepare可以写带”参数“的sql语句。

例如 $ps = $obj->prepare("SELECT * FROM `article` WHERE `id` = ?");

大家看到区别了吗?我后面那个`id` = 1, 换乘 `id` = ?了,这个问号就代表一个参数,这个参数是可以修改的。

例如我们这样写  $ps->bindValue(1 , 10);

这句代码的意思就是把sql语句中的第一个问号,替换成10,这样一来,我们执行$ps->execute(); 实际上是执行了 SELECT * FROM `article` WHERE `id` = 10。

需要注意的是,bindValue这里的第二个参数已经过滤的敏感字符,无需再次过滤,更不需要加引号什么的,直接用字符串或数字的值就行。

执行查询语句之后,我们可以通过fetch或fetchAll函数来获得查询结果,两个函数,一个是返回一条记录,一个是返回所有记录。

我说了一大堆,也不知道说清楚没有,写一个完整的实例吧。

try{

$obj = new PDO('mysql:host=localhost;dbname=localhost' ,  'root'  ,  '123456');//生成PDO示例

$obj ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//设置以异常的形式报错

$obj ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC );//设置fetch时返回数据形式为数组

$ps = $obj->prepare("SELECT *  FROM `article` WHERE `type` = ? and `menu` = ?");//生成一个PDOStatement实例

$ps->bindValue(1 , "文章");//第一个?处的参数换成 文章,不需要附加任何处理

$ps->bindValue(2 , 2);//第二个?处的参数换成2,不需要附加任何处理

$ps->execute(); //正式执行。

$res = $ps->fetchAll();//得到查询结果

} catch(Exception $e){

exit($e->getMessage());

}

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP连接MySQL数据库的三种方式分别是PDOMySQLi和mysqlPDO(PHP Data Objects)是PHP提供的一种数据库操作扩展,支持多种数据库,其中包括MySQLPDO提供了一组统一的方法,使开发者能够以同样的方式对待不同的数据库。其优点包括安全性高、可移植性好、支持事务处理等。使用PDO连接MySQL数据库时,需要使用PDO的构造函数new PDO(),并传入相关的连接信息。 MySQLi(MySQL Improved)是PHP中的一种连接MySQL数据库的扩展,是对原有mysql扩展的增强和改进。MySQLi提供了面向对象和面向过程两种API,支持事务处理、预处理语句、存储过程等功能,同时也提供了对MySQL的新特性的支持。使用MySQLi连接MySQL数据库时,首先需要创建一个MySQLi对象,然后调用相应的方法进行连接、查询等操作。 mysql扩展是PHP早期版本提供的一种连接MySQL数据库的方式,但自PHP5.5.0版本开始已被弃用,不再被推荐使用。mysql扩展的连接方式相对简单,使用mysql_connect()函数进行连接,并传入相关的连接参数。然而,mysql扩展存在一些安全性和兼容性的问题,容易受到SQL注入等攻击。 综上所述,PDOMySQLi和mysql是PHP常用的三种连接MySQL数据库的方式。其中PDO具有较高的安全性和可移植性,使用方式统一;MySQLi支持较多的功能特性,包括事务处理、预处理语句等;mysql扩展已被弃用,不推荐使用。开发者可以根据自己的需求和情况选择合适的连接方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值