`

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

阅读更多
PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)

<?php
            #数据库连接
            $dbtype = 'mysql';
            $host = 'localhost';
            $db = 'test';
            $user = 'root';
            $psw = '19sucai';
            
            $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);
                $stmt2->bindParam(1, $userId);
                $userId = 1;
                $stmt1->execute();
                $stmt2->execute();
                $dbh->commit();
            } catch(Exception $e) {
                $dbh->rollBack();
                die('Transaction Error Message: ' . $e->getMessage());
            }
?>

 

分享到:
评论

相关推荐

    PDO连接数据库类

    查询操作主要是PDO::query()、PDO::exec&#40;&#41;、PDO::prepare()。PDO::query()主要是用于有记录结果返回的操作,特别是SELECT操作,PDO::exec&#40;&#41;主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、...

    计算机后端-PDO10PDO对象的exec方法.avi

    计算机后端-PDO10PDO对象的exec方法.avi

    PHP中的PDO函数库

    PDO-&gt;beginTransaction() — 标明回滚起始点 PDO-&gt;commit() — 标明回滚结束点,并执行SQL PDO-&gt;__construct() — 建立一个PDO 链接数据库的实例 PDO-&gt;errorCode() — 获取错误码 PDO-&gt;errorInfo() — 获取错误的...

    计算机后端-PDO11PDO对象的query方法.avi

    计算机后端-PDO11PDO对象的query方法.avi

    PHP中PDO的简单使用

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

    PDO::exec讲解

    PDO::exec PDO::exec — 执行一条 SQL 语句,并...对于在程序中只需要发出一次的 SELECT 语句,可以考虑使用PDO::query()。 参数说明: statement :要被预处理和执行的SQL 语句。 返回值 PDO::exec&#40;&#41;返回受

    php pdo组件的用法

    单条查询不需要启用事务处理,并且不需要使用PDO的预处理方式,但注意要使用$pdo-&gt;quote()方法来自动将字符型变量值的字符中首尾加上单引号,以防止SQL注入,并且免去特殊符号转义的过程。 &lt;?php $db_type='mysql';...

    php_pdo_oci.dll支持PHP的各个版本

    php_pdo_oci.dll支持PHP的各个版本 用于php连接oracle时,报php_pdo_oci.dll不能正常加载的错误

    php pdo分页类

    php5推出的pdo统一数据接口,为了方便数据的分页写的pdo分页类。

    php5.4之PDO连接SQLSERVER

    PHP的PDO连接SQLSERVER: 含全套工具: php5.4_x86_nts安装包 微软的SQLSRV拓展 微软的odbc驱动msodbcsql.msi 微软的sql客户端sqlncli.msi 配置好的php.ini 具体安装说明(原创亲测) 说实话这个得来很不容易,整整一天...

    PDO::inTransaction讲解

    PDO::inTransaction — 检查是否在一个事务内(PHP 5 &gt;= 5.3.3, Bundled pdo_pgsql) 说明 语法 bool PDO::inTransaction ( void ) 检查驱动内的一个事务当前是否处于激活。此方法仅对支持事务的数据库驱动起作用。 ...

    PHP使用PDO连接SQLITE3

    不错的教程。用PHP的PDO来连接SQLITE 3

    php使用PDO下exec&#40;&#41;函数查询执行后受影响行数的方法

    本文实例讲述了php使用PDO下exec&#40;&#41;函数查询执行后受影响行数的方法。分享给大家供大家参考,具体如下: exec&#40;&#41;方法返回执行后受影响的行数。 语法:int PDO::exec&#40;string statement&#41; 提示:...

    php完美pdo类封装

    php pdo类封装,单例模式,多种操作方式,预处理,事务

    php采用ms官方扩展pdo方式连接高版本mssql需要sqlncli

    php采用ms官方扩展pdo方式连接高版本mssql需要sqlncli,具体例子参看本博客。

    PHP的PDO类教程

    PHP的PDO类教程,收集了php 使用pdo操作教程

    PHP7.3的sql server PDO_DBLIB库

    PHP7.3的sql server PDO_DBLIB库

    PHP PDO函数简介

    PHP PDO函数简介

    php中在PDO中使用事务(Transaction)

    在 PDO 中, 事务已经显得非常简单. 下面一个基本的例子, 演示了向 SQLite 数据库插入 1000000 条数据, 并且在出错的时候回滚. 复制代码 代码如下: try { $conn = new PDO(‘sqlite:Transactioion.s3db’); $conn-&gt;...

Global site tag (gtag.js) - Google Analytics