`

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());
            }
?>

 

分享到:
评论

相关推荐

    phpPDO+mysq

    PHP PDO(PHP Data Objects)是PHP的一个扩展,用于提供数据库访问...通过以上内容,我们可以看出PHP PDO与MySQL结合使用,能够实现高效、安全的数据库操作,无论是简单的CRUD还是复杂的业务逻辑,都能得到很好的支持。

    php_pdo文件

    2. 执行查询:PDO提供了`query()`、`exec()`等方法执行SQL查询。例如,使用`query()`获取数据: ```php $stmt = $pdo-&gt;query('SELECT * FROM users'); $results = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC); ``` 3. ...

    PHP开发笔记系列(一)-PDO使用

    PDO提供了多种执行SQL查询的方法,例如`query()`用于执行单条SQL语句并返回结果集,`exec()`用于执行修改数据的SQL语句(如INSERT、UPDATE、DELETE),`prepare()`则用于预处理SQL语句。 预处理语句是PDO的一个重要...

    PHP使用PDO连接SQLITE3

    ### PHP使用PDO连接SQLite3知识点解析 #### 一、引言 在Web开发领域中,PHP作为一种常用的服务器端脚本语言,与各种数据库系统的交互能力是其重要特性之一。其中,SQLite作为一款轻量级的数据库系统,在不需要复杂...

    PHP中的PDO函数库

    - **PDOStatement**是通过`PDO-&gt;query()`或`PDO-&gt;prepare()`创建的对象,用于执行SQL语句。 - **常用方法**: - `PDOStatement-&gt;execute()`:执行已准备好的语句。 - `PDOStatement-&gt;fetchAll()`:获取所有结果...

    PHP PDO函数简介

    - **事务处理**:PDO支持通过`beginTransaction()`、`commit()`和`rollBack()`进行事务管理。 - **错误处理**:可以通过设置PDO实例的错误模式来改变错误处理方式。 #### 六、总结 PDO作为PHP中的数据库访问层,极...

    php pdo 例子

    **PHP PDO(PHP Data Objects)** 是PHP语言中用于数据库访问的一个扩展,它提供了一个数据库访问的抽象层,使得开发者可以使用相同的API来操作多种不同的数据库系统,如MySQL、PostgreSQL、SQLite等。PDO提供了...

    pdo的操作吧pdo的操作吧

    $stmt = $this-&gt;pdo-&gt;prepare($sql); foreach ($params as $key =&gt; $value) { $stmt-&gt;bindValue("$key", $value); } $stmt-&gt;execute(); return $stmt-&gt;fetchAll(); } // 其他类似的方法,如insert、update...

    关于PDO操作的一点笔记

    PDO 提供了多种方法来执行 SQL 查询,包括 `PDO::query()`、`PDO::exec()` 和 `PDO::prepare()`。 - **PDO::query()** 用于执行简单的 SELECT 语句,并立即返回结果集。如果执行的是其他类型的 SQL 语句,则返回 ...

    Php中的pdo函数库

    PDO(PHP Data Objects)是PHP中的一个数据库访问接口,它提供了一个统一的API来与多种不同的数据库管理系统(DBMS)进行交互。...无论是小型项目还是大型应用,都可以考虑使用PDO来构建数据库交互层。

    PDO::exec讲解

    PDO::exec 是 PHP 中用于执行 SQL 语句的方法,它主要适用于执行那些不会返回结果集的 SQL 操作,比如 INSERT、UPDATE 和 DELETE。这个方法在 PHP 5.1.0 版本及以上以及 PECL pdo 拓展 0.1.0 版本及以上可用。 **...

    pdo.rar_site:www.pudn.com

    $pdo-&gt;beginTransaction(); try { // 数据库操作 $pdo-&gt;commit(); } catch (Exception $e) { $pdo-&gt;rollback(); throw $e; } ``` 7. **结果集处理**:PDO提供了多种方式获取查询结果,如`fetch()`, `...

    mysqlPdo连接类

    3. **执行SQL语句**:可以使用`query()`方法执行查询,`exec()`方法执行非查询操作,如INSERT、UPDATE、DELETE等。 ```php $stmt = $pdo-&gt;query('SELECT * FROM users'); ``` 4. **处理结果集**:对于查询操作,可以...

    pdo基础函数库

    假设我们有一个简单的用户表 `users`,包含字段 `id`, `username`, `email`,以下是如何使用 PDO 进行增删改查的示例: 1. **插入记录**: ```php $stmt = $pdo-&gt;prepare("INSERT INTO users (username, email) ...

    php-database-源码.rar

    在PDO中,可以使用`beginTransaction()`, `commit()`, 和 `rollback()` 方法。例如: ```php $pdo-&gt;beginTransaction(); try { // 执行SQL操作 $pdo-&gt;exec("..."); $pdo-&gt;commit(); } catch (PDOException $e...

    Learning.PHP.Data.Objects.pdf

    - **执行查询**:使用`query()`方法执行简单的SELECT语句。 ```php $stmt = $pdo-&gt;query("SELECT * FROM users"); while ($row = $stmt-&gt;fetch()) { echo $row['name'] . "\n"; } ``` ##### 4. 预处理语句 - ...

    PHP.SQLite的配置使用

    使用PDO的`query()`或`prepare()`方法执行SELECT语句: ```php &lt;?php $results = $db-&gt;query('SELECT * FROM users'); foreach ($results as $row) { echo "ID: " . $row['id'] . ", Name: " . $row['name'] . ", ...

    PHPDemo事务 新增 修改 查询 防SQL注入

    在PDO中,你可以使用`beginTransaction()`开始一个事务,`commit()`提交事务,如果出现错误,使用`rollback()`回滚事务。例如: ```php $pdo-&gt;beginTransaction(); try { // 执行数据库操作 $pdo-&gt;exec(...

    PHP实现的pdo连接数据库并插入数据功能简单示例

    本篇文章将通过一个简单的实例,介绍如何使用PDO在PHP中连接数据库并插入数据。 首先,我们需要创建一个配置文件`pdo_config.php`,用于存储数据库连接的相关信息: ```php &lt;?php $db_Type = "mysql"; // 数据库...

    php+sqlite(入门案例)

    使用`exec()`或`query()`方法插入数据: ```php &lt;?php $stmt = $db-&gt;prepare("INSERT INTO users (name, email) VALUES (:name, :email)"); $stmt-&gt;bindParam(':name', $name); $stmt-&gt;bindParam(':email', $email)...

Global site tag (gtag.js) - Google Analytics