1 <html>
 2     <body>
 3         <?php
 4             #数据库连接
 5             $dbtype = 'mysql';
 6             $host = 'localhost';
 7             $db = 'test';
 8             $user = 'root';
 9             $psw = 'china0913';
10
11             $dsn = $dbtype . ':host=' . $host . ';' . 'dbname=' . $db;
12
13             try {
14                 $dbh = new PDO($dsn, $user, $psw, array(PDO::ATTR_PERSISTENT=>true));
15                 echo '连接成功<br>';
16             } catch(Exception $e) {
17                 die('Connect Failed Message: ' . $e->getMessage());
18             }
19
20             #使用query函数查询
21             $sql = 'SELECT * FROM user';
22             $query = $dbh->query($sql);
23             $query->setFetchMode(PDO::FETCH_ASSOC);    //设置结果集返回格式,此处为关联数组,即不包含index下标
24             $rs = $query->fetchAll();
25             var_dump($rs);
26
27             #使用exec函数进行INSERT,UPDATE,DELETE,结果返回受影响的行数
28             $sql = 'INSERT INTO user (`userName`, `userPassword`, `userAge`) SELECT (MAX(userId) + 1), \'123456\', 18 FROM user';    //插入一行用户数据,其中userName使用userId最大值+1
29             // $rs = $dbh->exec($sql);
30             // var_dump($rs) . '<br>';
31
32             #使用prepareStatement进行CURD
33             $sql = 'SELECT * FROM user WHERE userId = ?';
34             $stmt = $dbh->prepare($sql);
35             $stmt->bindParam(1, $userId);    //绑定第一个参数值
36             $userId = 1;
37
38             $stmt->execute();
39             $stmt->setFetchMode(PDO::FETCH_ASSOC);
40             $rs = $stmt->fetchAll();
41             var_dump($rs);
42
43             #使用事务
44             try {
45                 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    //设置错误模式,发生错误时抛出异常
46                 $dbh->beginTransaction();
47                 $sql1 = 'SELECT bookNum FROM book WHERE bookId = ? FOR UPDATE';    //此处加上行锁,可以对bookNum做一些判断,bookNum>1,才做下一步更新操作
48                 $sql2 = 'UPDATE book SET bookNum=bookNum-1 WHERE bookId = ?';    //加上行锁后,如果user1在买书,并且user1的买书过程没有结束,user2就不能执行SELECT查询书籍数量的操作,这样就保证了不会出现只有1本书,却两个人同时买的状况
49                 $stmt1 = $dbh->prepare($sql1);
50                 $stmt2 = $dbh->prepare($sql2);
51                 $stmt1->bindParam(1, $userId);
52                 $stmt2->bindParam(1, $userId);
53                 $userId = 1;
54                 $stmt1->execute();
55                 $stmt2->execute();
56                 $dbh->commit();
57             } catch(Exception $e) {
58                 $dbh->rollBack();
59                 die('Transaction Error Message: ' . $e->getMessage());
60             }
61         ?>
62     </body>
63 </html>

转载于:https://www.cnblogs.com/zemliu/archive/2012/05/08/2490953.html

PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)相关推荐

  1. php5.5 pdo mysql_PHP5中PDO的简单使用

    PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的 ...

  2. query.exec报QSqlQuery::exec: database not open

    DataBase::DataBase() {int ret = 0;db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabase ...

  3. PHP+MySql+PDO实现简单登录、注册

    最近学习中要使用PHP+MySql实现简单登录注册,看了很多简单案例后发现,并没有人通过PDO实现简单登录注册,要么就是Mysql和MySqli实现,就算实现了意义也不大,js就可以做的事情,没必要放 ...

  4. springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁

    本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...

  5. 神经网络 c++ 源码 可以直接复制运行,提供数据集,操作简单,最少仅需4行代码

    神经网络 c++ 源码 可以直接复制运行,提供数据集,操作简单,最少仅需4行代码 本文的神经网络,让你省去Python那些花里胡哨的变量名,最少仅需4行代码即可完成自己的神经网络** 本文章采用c++ ...

  6. php exec和query,exec和php之间的区别

    TL;博士 >使用PDO :: exec发出不返回结果集的一次性非预准备语句. >使用PDO :: query发出返回结果集的一次性非预准备语句. 如果语句只执行一次和/或它们是以预准备语 ...

  7. PHP+MySql+PDO实现简单增加、删除、修改、查询

    最近学习中要使用PHP+MySql实现表单的增加.删除.修改.查询,看了很多简单案例后,写了一个简单的表单,下面请看代码,有错误的地方希望大佬们指教! 数据库名itcast , 表名emp_info ...

  8. php PDO 浮点数返回,php – 如何在PDO中简单地返回对象?

    也许您可以尝试扩展PDO类以自动为您调用该函数-简而言之: class myPDO extends PDO { function animalQuery($sql) { $result = paren ...

  9. PHP PDO学习(二) exec执行SQL

    exec 在一个单独的函数调用中执行一条 SQL 语句,返回受此语句影响的行数. exec 不会处理select语句 <?php try {$pdo = new PDO('mysql:host= ...

  10. fetchall函数php,PHP PDO fetchAll(),简单结果

    关于PDO :: fetchAll()的问题太多,但我仍然找不到答案.我需要获取MySQL返回的结果.例如,如果我有要返回的列ID,名称,年龄,如下所示: array( "id"= ...

最新文章

  1. H5新增的标签以及属性
  2. SAP S/4HANA销售订单创建时,会自动触发生产订单的创建
  3. IM群聊消息如此复杂,如何保证不丢不重?
  4. 爬虫:验证码识别准确率(Tesseract-OCR)
  5. 程序自删除方法大总结
  6. 区块链 Zilliqa是什么
  7. SlickEdit 之Ubuntu 版本安装
  8. 【数学与算法】泰勒公式_线性化_雅各比矩阵_黑塞矩阵
  9. 高斯函数表达式C语言,C语言计算高斯核函数
  10. 配置alexa skill(二)
  11. 【小程序源码】超强大的头像制作神器微信小程序源码
  12. 微信小程序保存图片以及分享给朋友
  13. 利用Python脚本给图片批量添加文字水印
  14. 6.JUC-共享模型之工具
  15. 免费通信时代何时真正到来?
  16. Shade4PointLights
  17. mawen启动项目css样式失效问题解决方法 EL表达式无效
  18. ThoughtWorks全球CEO郭晓谈软件人才的招聘与培养
  19. android开发_表单上传图片及其它参数
  20. 国际码可以直接应用于计算机,2001年4月份全国高等教育自学考试计算机应用基础试题...

热门文章

  1. 别被IBM抛出的“认知商业”搞晕 这里为你详解
  2. 内连接,外连接,临时表,定义表,视图
  3. 22_粗粒度权限控制
  4. vue-router小案例-后台管理路由
  5. 研华自动驾驶计算机,研华全新发布宽温8TB NVMe SSD SQFlash 920系列 为自动驾驶应用保驾护航...
  6. linux single 禁用显卡,告诉你Ubuntu下禁用独显的方法及命令
  7. c++ 自定义 比较器 priority_queue_吃透Java集合系列七:PriorityQueue
  8. mysql datetime默认时间_Mysql中datetime默认值问题
  9. triz矛盾矩阵_怎样利用项目TRIZ矛盾定义法,突破产品“创
  10. BLS门限签名介绍及实现