基础级-PDO
来源:互联网 发布:查看淘宝店铺开店时间 编辑:程序博客网 时间:2024/05/18 03:44
- 前述
- 开启1
- 连接数据库
- 连接
- 异常
- 字符编码
- 错误
- 查询
- exec方法
- query方法
- fetch方法
- 预处理语句
- prepare方法
- bindValue方法
- execute方法
- fetchAll方法
- 小玩意
- 最后插入ID
- 事务
- 关闭
- 尾注
前述
PDO(PHP Data Object)在旧版PHP中无法使用,将在未来取代繁杂的数据库接口。
开启1
开启文件:php.ini
相关代码:(去除所需数据库的注释即可)
extension=php_pdo.dll //如若没有,请自行添加extension=php_pdo_mysql.dll //MySQL数据库
连接数据库
try{ $pdo = new PDO('mysql:host=localhost;dbname=db_name', 'username', 'password'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('SET NAMES "utf8"');}catch(PDOException $e){ $error = '连接数据库失败,错误代码:<br>' . $e->getMessage(); include 'error.html.php'; exit();}
连接
$pdo = new PDO('mysql:host=localhost;dbname=db_name', 'username', 'password');
异常
PDO在成功连接数据库后,将启用“故障沉默”模式。
我们希望出现任何执行失败后,PDO都会抛出一个PDOException,通过调用PDO对象的setAttribute方法可以配置模式。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// ATTR_ERRMODE控制错误模式:ERRMODE_EXCEPTION为抛出异常;
字符编码
$pdo->exec('SET NAMES "utf8"');
错误
我们截取Catch中的部分代码,错误信息的设置,首先源于:PDOException类2的$e(类型强制,PHP5的新功能之一),然后在提示中调用了getMessage方法,从服务器回去一条错误信息。
catch(PDOException $e){ $error = '连接数据库失败,错误代码:<br>' . $e->getMessage();
查询
$sql="SELECT name, password FORM user LIMIT 10"
exec方法:
发送SQL代码,执行查询,并返回影响条数。$result = $pdo->exec($sql)
query方法:
返回PDOStatement对象(一个结果集,涵盖了通过查询返回的所有条目的一个列表),可以通过循环来输出。$result = $pdo->query($sql)
fetch方法:
将数据集中的下一行作为一个数组返回,当数据集中无行之后,返回false。
// 可用foreach语句优化while ($row = $result->fetch()){ // process the row}
预处理语句:
(prepared statement)提前发送给数据库一条查询,但并不立刻执行。SQL代码中含有占位符(placeholder),稍后执行查询时,再为占位符供值,PDO会预防占位符的值产生的危险。
预处理语句在建立后,将允许重复使用,如下代码所示:
$sql = 'DELETE FROM joke WHERE jokeid = :id';$s = $pdo->prepare($sql);foreach($result as $row){ $jokeId = $row['id']; $s->bindValue(':id', $jokeId); $s->execute();}
prepare方法:
发送SQL语句,要求数据库准备好运行查询,并返回一个PDOStatement对象。
bindValue方法:
属于PDOStatement的方法,目的是发送所缺的值,每次发送一个值。
execute方法:
属于PDOStatement的方法,目的是请求数据库执行最终的查询。
预处理 实例:
$sql = 'INSERT INTO user SET name = "无名氏", password = :password';$s = $pdo->prepare($sql);$s->bindValue(':password', $_POST['password']);$s->execute();
fetchAll方法:
查询整个结果集,并将之存储在一个数组中。针对执行效率较慢的fetch方法。
小玩意
其实PDO除了标准的增删改查,还有一些有趣的东西。
最后插入ID
譬如注册时,我们需要一个最后ID,来完成玩家初始化(在玩家初次进入游戏时,再做这一步更安全),我们肯定会找到它:
// PDO::lastInsertId// 假设情景:新玩家插入完毕,计入日志系统$lastId = $pdo->lastInsertId();plog('系统生成新玩家,ID为' . $lastId);
事务
某些情况下,你想要执行一系列的多个SQL查询,并让它们一次生效,那你就需要用到“事务”(transaction)了。事务允许你将复杂的多个查询操作,当做一组动作来执行,已让其同时生效。
这里仅介绍PDO的事务命令,事务本身则另开一篇文章叙述。
try{ $pdo->beginTransaction(); /* perform a series of queries … */ $pdo->commit();}catch(PDOStatement $e){ $pdo->rollBack(); $error = '执行事务时出错。'; include 'error.html.php'; exit();}
关闭
关闭数据库连接很简洁,只需要$pdo = null;
即可。
尾注
本文仅涵盖基础PDO部分,对于未涵盖内容,请参见菜鸟教程(参考资料),或官方手册。
参考资料:
《PHP&MySQL Novice to Ninja》 著者:Kevin Yank
PDO - 菜鸟教程
- 在PHP中,PDO默认是开启的。 ↩
- PDO共有三种类,PDO 类代表与数据库的一个连接;PDOStatement 类代表查询以及查询结果集;PDOException 异常类意味着一个PDO引发的异常。 ↩
- 基础级-PDO
- PHP PDO 基础
- PHP PDO 基础
- PDO基础操作Mysql
- PHP PDO基础
- php 基础之PDO
- PDO的基础
- PDO基础操作
- PDO基础操作的封装
- pdo
- pdo
- pdo
- pdo
- pdo
- PDO
- PDO
- PDO
- PDO
- RUNTIME_CLASS(xx)->CreateObject()错误Error: Trying to create object which is not DECLARE_DYNCREATE
- Git常用的相关命令
- 如何使用U盘替换光驱引导部署WES7系统
- 手机App常见Bug积累
- ThinkPHP中实例化对象M()和D()的区别?ThinkPHP如何实例化对象?
- 基础级-PDO
- ORACLE基础语句-建表
- VS2012 找不到 EF EntityFramework 未安装
- USB to RS232 PL2303驱动在Win7 64位旗舰版无法安装问题解决
- saml
- golang中tcp socket粘包问题和处理
- Cordova指令
- the catalina_home environment variable is not defined correctly
- 自定义ContentProvider以及ContentObserver的使用完整详细示例