`
huimai
  • 浏览: 14942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

php pdo 开发mysql事务(行锁)

阅读更多
<html>
     <body>
         <?php
             #数据库连接
             $dbtype = 'mysql';
             $host = 'localhost';
             $db = 'test';
             $user = 'root';
             $psw = 'china0913';
            
             $dsn = $dbtype . ':host=' . $host . ';' . 'dbname=' . $db;
            
             try {
                 $dbh = new PDO($dsn, $user, $psw, array(PDO::ATTR_PERSISTENT=>true));
                 echo '连接成功<br>';
             } catch(Exception $e) {
                 die('Connect Failed Message: ' . $e->getMessage());
             }
            
             #使用query函数查询
             $sql = 'SELECT * FROM user';
             $query = $dbh->query($sql);
             $query->setFetchMode(PDO::FETCH_ASSOC);    //设置结果集返回格式,此处为关联数组,即不包含index下标
             $rs = $query->fetchAll();
             var_dump($rs);
            
             #使用exec函数进行INSERT,UPDATE,DELETE,结果返回受影响的行数
             $sql = 'INSERT INTO user (`userName`, `userPassword`, `userAge`) SELECT (MAX(userId) + 1), \'123456\', 18 FROM user';    //插入一行用户数据,其中userName使用userId最大值+1
             // $rs = $dbh->exec($sql);
             // var_dump($rs) . '<br>';
            
             #使用prepareStatement进行CURD
             $sql = 'SELECT * FROM user WHERE userId = ?';
             $stmt = $dbh->prepare($sql);
             $stmt->bindParam(1, $userId);    //绑定第一个参数值
             $userId = 1;
            
             $stmt->execute();
             $stmt->setFetchMode(PDO::FETCH_ASSOC);
             $rs = $stmt->fetchAll();
             var_dump($rs);
            
             #使用事务
             try {
                 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    //设置错误模式,发生错误时抛出异常
                 $dbh->beginTransaction();
                 $sql1 = 'SELECT bookNum FROM book WHERE bookId = ? FOR UPDATE';    //此处加上行锁,可以对bookNum做一些判断,bookNum>1,才做下一步更新操作
                 $sql2 = 'UPDATE book SET bookNum=bookNum-1 WHERE bookId = ?';    //加上行锁后,如果user1在买书,并且user1的买书过程没有结束,user2就不能执行SELECT查询书籍数量的操作,这样就保证了不会出现只有1本书,却两个人同时买的状况
                 $stmt1 = $dbh->prepare($sql1);
                 $stmt2 = $dbh->prepare($sql2);
                 $stmt1->bindParam(1, $userId);      //应该是bookId
                 $stmt2->bindParam(1, $userId);      //应该是bookId
                 $userId = 1;      //应该是bookId
                 $stmt1->execute();
                 $stmt2->execute();
                 $dbh->commit();
             } catch(Exception $e) {
                 $dbh->rollBack();
                 die('Transaction Error Message: ' . $e->getMessage());
             }
         ?>
     </body>
</html>
分享到:
评论

相关推荐

    php_pdo_mysql.dll_dll_PDO_MYSQL_php_

    标题 "php_pdo_mysql.dll_dll_PDO_MYSQL_php_" 暗示了我们正在讨论的是PHP的一个扩展,即PDO_MYSQL,它是一个用于MySQL数据库连接的PHP数据对象(PDO)驱动。PDO_MYSQL允许PHP应用程序使用PDO接口与MySQL服务器进行...

    pdo_mysql.rar_PDO_pdo_mysql.so

    总的来说,PDO和PDO_MYSQL是PHP开发中与MySQL数据库交互的重要工具。正确配置和使用这些组件,可以帮助开发者创建安全、高效且易于维护的数据库应用程序。了解如何安装、启用和利用PDO_MYSQL,以及熟悉其提供的功能...

    PHP之pdo_mysql扩展安装步骤

    在PHP开发中,PDO(PHP Data Objects)是一个用于数据库访问的扩展,提供了统一的API来访问多种数据库系统。而PDO_MYSQL是PDO扩展中的一个驱动,专门用于与MySQL数据库进行交互。Magento是一款知名的开源电子商务...

    pdo_mysql.so

    在linux下是php支持使用PDO的方式访问mysql数据库的必要文件

    PDO_MYSQL-1.0.2.tgz

    标题中的"PDO_MYSQL-1.0.2.tgz"是一个特定版本的PHP扩展,PDO_MYSQL的1.0.2版本,它被压缩成一个tar.gz格式的文件。PDO_MYSQL是PHP的一个数据库访问接口,它允许PHP应用程序通过PHP Data Objects (PDO) API与MySQL...

    PDO连接mysql封装类

    在PHP开发中,PDO(PHP Data Objects)提供了一种标准的方法来连接多种数据库,包括MySQL。PDO具有许多优势,如预处理语句、事务支持和更好的错误处理机制。本篇文章将详细介绍如何创建一个封装良好的PDO连接MySQL的...

    php下pdo的mysql事务处理用法实例

    在PHP中使用PDO进行MySQL事务处理,通常包括以下几个步骤: 1. **关闭自动提交**:在开始事务之前,我们需要关闭自动提交模式,以确保所有操作作为一个单元执行。这可以通过设置`PDO::ATTR_AUTOCOMMIT`属性为0来...

    php实现PDO的mysql数据库操作类

    讲述了PHP实现PDO的mysql数据库操作类,dbconfig类负责配置数据库访问信息,包括:服务器地址、端口、数据库实例名、用户名、用户密码、字符集等。 dbtemplate类集合了对数据库的访问操作,主要有以下几个操作: 1. ...

    pdo封装mysql类

    在本案例中,"pdo封装mysql类"指的是一个使用PDO扩展专门针对MySQL数据库进行操作的自定义PHP类。这个类可能包含了连接、查询、预处理语句、事务处理等常见数据库操作的功能。 在PHP中,封装MySQL类通常是为了方便...

    一个PDO_MYSQL的类

    一个PDO_MYSQL的类,简单的错误抛出,初始化,定义连接参数.这是一段公开的源代码,php PDO_Mysql类,方便转换数据库的时候不用修改所有的查询方式,这里是 通用的query,exec来查询和更新,删除,插入操作

    php实现PDO的mysql数据库操作类.zip

    讲述了PHP实现PDO的mysql数据库操作类,dbconfig类负责配置数据库访问信息,包括:服务器地址、端口、数据库实例名、用户名、用户密码、字符集等。 dbtemplate类集合了对数据库的访问操作,主要有以下几...

    PDO操作MySql类

    为了让数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类,由于pdo可以连接现在流行的各种数据库,所以单独的写个配置类类来完成不同数据库DSN的配置,为了让代码重用,利用此类可以动态的连接各种数据库...

    PHP+MySql+PDO小案例—文章管理系统

    总的来说,这个PHP+MySQL+PDO文章管理系统是一个典型的Web开发实践,涵盖了后端逻辑、数据库交互和前端呈现等多个层面。通过学习和实践这个案例,开发者可以加深对PHP、PDO和MySQL的理解,提高自己的Web开发技能。...

    PDO操作MySql类.zipzip

    为了让数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类,由于pdo可以连接现在流行的各种数据库,所以单独的写个配置类类来完成不同数据库DSN的配置,为了让代码重用,利用此类可以动态的连接各种数据库...

    php用法PDO操作MySQL数据库实例_.docx

    标题中的“php用法PDO操作MySQL数据库实例”和描述中提到的内容主要涉及到使用PHP的PDO(PHP Data Objects)扩展来连接和操作MySQL数据库。PDO是一个轻量级且全面的数据库访问接口,它提供了数据访问抽象层,使得...

    PHP-MySQL-PDO-Database-Class-master

    标题 "PHP-MySQL-PDO-Database-Class-master" 暗示了这是一个关于使用PHP与MySQL数据库交互的项目,特别强调了使用PDO(PHP Data Objects)扩展。PDO是PHP中的一个数据库访问层,提供了统一的API来连接多种数据库,...

    php使用PDO操作MySQL数据库实例

    标题中的"php使用PDO操作MySQL数据库实例"是指在PHP编程中使用PDO(PHP Data Objects)扩展来连接并操作MySQL数据库的实践案例。PDO是PHP提供的一种数据库访问接口,旨在为不同的数据库系统提供一个统一的访问方式,...

    PHP8 PDO MYSQL示例

    在本文中,我们将深入探讨如何在PHP8中使用PDO(PHP Data Objects)扩展与MySQL数据库进行交互。PHP8是PHP的最新版本,提供了许多性能优化和新特性,而PDO则是一个用于数据库访问的抽象层,它支持多种数据库系统,...

    phpPDO+mysql单次增删改查多次增删改查百度分页多选删除

    在PHP开发中,数据库操作是不可或缺的一部分,而PDO(PHP Data Objects)提供了一种安全、高效的方式来连接MySQL数据库并执行SQL语句。本教程将详细讲解如何使用PDO进行单次和多次的增删改查操作,并结合百度分页...

Global site tag (gtag.js) - Google Analytics