当前位置: 首页 > news >正文

《PHP精粹:编写高效PHP代码》——2.6节高级PDO特征

本节书摘来自华章社区《PHP精粹:编写高效PHP代码》一书中的第2章,第2.6节高级PDO特征,作者:(美)  Davey Shafik,更多章节内容可以访问云栖社区“华章社区”公众号查看

2.6 高级PDO特征
我们已经看到PDO功能构成了以数据库驱动的PHP应用程序的主体。然而, PDO还有几个锦囊妙计需要我们好好研究。下面两节将显示我们如何利用数据库的事务,以及如何在PHP代码中调用存储过程。

2.6.1 事务和PDO
在数据库术语中事务(transaction)是一组必须执行的语句的集合。这组语句要么必须全部顺利完成,要么一个也不运行。不是所有的数据库都支持事务,有些支持,有些不支持,有些经过配置以后才会支持。对于MySQL,有些表的类型难以获得事务支持。
如果数据库不支持事务,PDO会假装事务正在顺利执行,因此在这种情形下要提防发生意想不到的结果。
若要使用事务,我们并不需要对代码做太多改变。如果有一系列的SQL语句要组成一个事务,我们只需要:
1)在运行任何语句之前通过调用PDO::beginTransaction()方法启动事务。
2)当所有的语句成功运行之后调用PDO::commit()方法。
3)如果调用PDO::rollback()方法时出现错误,我们要取消事务;这将取消所有已经运行的语句。
那么这些在代码中的表现又会是怎样呢?


892deee646a18c4b3244dab25db047dda5d0f8c8

你可以在任何地方使用回滚功能。例如,如果没有行被更新你可能想要回滚。何时使用这些功能完全取决于你建立的应用程序。
exec()方法和返回值
上面的示例中使用exec()方法对数据库运行了一次性语句。exec()的返回值若不是受影响的行数,就是查询失败时的false。当你使用===比较运算符检查返回值时,确定结果是否为false,并识别false返回值和零影响行之间的区别时,你要特别小心。

事务在关键信息应用程序中特别有用,传统上,我们将它们用在如银行这样的领域。如果有一笔钱从一个账户取出,就必须进入另一个账户,或者依然保留在第一个账户中!事务使这种系统在可靠和故障安全的方式中运行。我们使用事务功能,比起费力分析在发生错误的事件里我们应该运行哪种查询更为简单。

2.6.2 存储过程和PDO
一些数据库平台还支持存储过程(stored procedure),它类似于函数,但存储在数据库层。数据库平台在调用它们的时候可以选择一些参数,如同之前所做,我们在预处理语句中使用占位符。为了说明这个例子,让我们来创建一个简单的存储过程:


8338d989a2b1d5ab731d8ae9d1ae1978042dfcc2

存储过程实际上是一个相当大的主题;如果你想更多地了解它们,你可以看一下PHP手册中关于存储过程的部分。如果你需要,存储过程是在数据库层中包含应用程序逻辑的非常有用的方式。

相关文章:

  • 影响数据中心托管的因素
  • 中兴视觉大数据报道:人工智能应用将会帮助我们更好的决策
  • 如何使用Shodan搜索引擎来诊断漏洞?
  • 如何用App工厂免费生成电商应用
  • 代理(Proxy)和反射(Reflection)
  • 区块链物联网的垂直领域应用
  • 从发展模式看SaaS服务的昨天、今天和明天
  • 升级pip 到 10.0.1
  • sureface 屏幕残影问题官方解决方案 - 卸载显卡驱动
  • [20170728]oracle保留字.txt
  • 为何我们要用 React 来写小程序 - Taro 诞生记
  • 漫步云端:谁给你的安全买单?
  • 深度学习最佳实践系列——权重w初始化
  • 《大数据原理:复杂信息的准备、共享和分析》一一2.10 重标识
  • Html引入百度富文本编辑器ueditor
  • [译]前端离线指南(上)
  • 【347天】每日项目总结系列085(2018.01.18)
  • fetch 从初识到应用
  • gulp 教程
  • Java反射-动态类加载和重新加载
  • Js基础知识(一) - 变量
  • Median of Two Sorted Arrays
  • php的插入排序,通过双层for循环
  • Shadow DOM 内部构造及如何构建独立组件
  • Shell编程
  • spring security oauth2 password授权模式
  • 阿里云前端周刊 - 第 26 期
  • 基于游标的分页接口实现
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前嗅ForeSpider教程:创建模板
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 为视图添加丝滑的水波纹
  • 学习HTTP相关知识笔记
  • 说说我为什么看好Spring Cloud Alibaba
  • 我们雇佣了一只大猴子...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #define、const、typedef的差别
  • #Linux(make工具和makefile文件以及makefile语法)
  • (1)bark-ml
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)换源+apt-get基础配置+搜狗拼音
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (力扣)1314.矩阵区域和
  • (转)h264中avc和flv数据的解析
  • (转)Linq学习笔记
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net Remoting常用部署结构
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .Net6 Api Swagger配置
  • .net6 webapi log4net完整配置使用流程