PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)
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,行锁)相关推荐
- php5.5 pdo mysql_PHP5中PDO的简单使用
PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的 ...
- query.exec报QSqlQuery::exec: database not open
DataBase::DataBase() {int ret = 0;db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabase ...
- PHP+MySql+PDO实现简单登录、注册
最近学习中要使用PHP+MySql实现简单登录注册,看了很多简单案例后发现,并没有人通过PDO实现简单登录注册,要么就是Mysql和MySqli实现,就算实现了意义也不大,js就可以做的事情,没必要放 ...
- springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁
本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...
- 神经网络 c++ 源码 可以直接复制运行,提供数据集,操作简单,最少仅需4行代码
神经网络 c++ 源码 可以直接复制运行,提供数据集,操作简单,最少仅需4行代码 本文的神经网络,让你省去Python那些花里胡哨的变量名,最少仅需4行代码即可完成自己的神经网络** 本文章采用c++ ...
- php exec和query,exec和php之间的区别
TL;博士 >使用PDO :: exec发出不返回结果集的一次性非预准备语句. >使用PDO :: query发出返回结果集的一次性非预准备语句. 如果语句只执行一次和/或它们是以预准备语 ...
- PHP+MySql+PDO实现简单增加、删除、修改、查询
最近学习中要使用PHP+MySql实现表单的增加.删除.修改.查询,看了很多简单案例后,写了一个简单的表单,下面请看代码,有错误的地方希望大佬们指教! 数据库名itcast , 表名emp_info ...
- php PDO 浮点数返回,php – 如何在PDO中简单地返回对象?
也许您可以尝试扩展PDO类以自动为您调用该函数-简而言之: class myPDO extends PDO { function animalQuery($sql) { $result = paren ...
- PHP PDO学习(二) exec执行SQL
exec 在一个单独的函数调用中执行一条 SQL 语句,返回受此语句影响的行数. exec 不会处理select语句 <?php try {$pdo = new PDO('mysql:host= ...
- fetchall函数php,PHP PDO fetchAll(),简单结果
关于PDO :: fetchAll()的问题太多,但我仍然找不到答案.我需要获取MySQL返回的结果.例如,如果我有要返回的列ID,名称,年龄,如下所示: array( "id"= ...
最新文章
- H5新增的标签以及属性
- SAP S/4HANA销售订单创建时,会自动触发生产订单的创建
- IM群聊消息如此复杂,如何保证不丢不重?
- 爬虫:验证码识别准确率(Tesseract-OCR)
- 程序自删除方法大总结
- 区块链 Zilliqa是什么
- SlickEdit 之Ubuntu 版本安装
- 【数学与算法】泰勒公式_线性化_雅各比矩阵_黑塞矩阵
- 高斯函数表达式C语言,C语言计算高斯核函数
- 配置alexa skill(二)
- 【小程序源码】超强大的头像制作神器微信小程序源码
- 微信小程序保存图片以及分享给朋友
- 利用Python脚本给图片批量添加文字水印
- 6.JUC-共享模型之工具
- 免费通信时代何时真正到来?
- Shade4PointLights
- mawen启动项目css样式失效问题解决方法 EL表达式无效
- ThoughtWorks全球CEO郭晓谈软件人才的招聘与培养
- android开发_表单上传图片及其它参数
- 国际码可以直接应用于计算机,2001年4月份全国高等教育自学考试计算机应用基础试题...
热门文章
- 别被IBM抛出的“认知商业”搞晕 这里为你详解
- 内连接,外连接,临时表,定义表,视图
- 22_粗粒度权限控制
- vue-router小案例-后台管理路由
- 研华自动驾驶计算机,研华全新发布宽温8TB NVMe SSD SQFlash 920系列 为自动驾驶应用保驾护航...
- linux single 禁用显卡,告诉你Ubuntu下禁用独显的方法及命令
- c++ 自定义 比较器 priority_queue_吃透Java集合系列七:PriorityQueue
- mysql datetime默认时间_Mysql中datetime默认值问题
- triz矛盾矩阵_怎样利用项目TRIZ矛盾定义法,突破产品“创
- BLS门限签名介绍及实现