swoole学习之mysql增删改查事务

本文详细介绍了如何使用Swoole协程MySQL进行数据库的增删改查操作,并演示了事务处理的步骤。首先配置MySQL连接,然后通过查询、增加、编辑和删除操作来管理数据。接着,展示了如何实现事务处理,确保多个操作的原子性,最后通过示例展示了在事务中处理数据转移的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:配置

<?php

class MysqlService
{

    //定义一个变量
    public $dbSource = '';
    public $dbConfig = '';
    //定义构造函数
    public function __construct()
    {
        Co\run(function () {
            //实例化mysql服务
            $this->dbSource = new Swoole\Coroutine\MySQL();
            //配置mysql参数
            $this->dbConfig = array(
                'host' => '127.0.0.1',
                'port' => '3306',
                'user' => 'root',
                'password' => '123456',
                'database' => 'qipa250',
                'charset' => 'utf8',
            );       
        });
    }
}

//实例化类
$mysql = new MysqlService();

第二步:查询

    //查询方法
    public function select($id)
    {
        // 连接
        go(function () use ($id) {
            $stmt = $this->dbSource->prepare('select * from qipa_member where id =?');
            echo "<pre>";
            print_r($stmt);
            if ($stmt == false) {
                var_dump($this->dbSource->errno, $this->dbSource->error);
            } else {
                $ret2 = $stmt->execute(array($id));
                echo "<pre>";
                print_r($ret2);
            }
            // 关闭连接
            $this->dbSource->close();
        });
    }

在类实例化后调用select方法

$id = 1;
$mysql->select($id);

数据库中的数据
在这里插入图片描述执行

php mysqlService.php

在这里插入图片描述

第三步:增加

    //增加
    public function add($params)
    {

        Co\run(function () use ($params) {

            echo "<pre>";
            print_r($params);

            $now = date('Y-m-d H:i:s', time());

            echo $sql = 'insert into qipa_member value(null,"' . $params['member_name'] . '","' . $params['member_phone'] . '","' . $now . '","' . $now . '")';

            $this->dbSource->connect($this->dbConfig);

            $res = $this->dbSource->query($sql);
            if ($res === false) {
                return;
            }
        });
    }

定义要增加的内容

$member_data = array(
    'member_name' => '奇葩',
    'member_phone' => 'qipaqipa'
);
$mysql->add($member_data);

在这里插入图片描述
数据库中查看,添加成功
在这里插入图片描述

第四步:编辑

    //修改
    public function edit($params)
    {
        Co\run(function () use ($params) {

            echo "<pre>";
            print_r($params);

            echo $sql = ' update qipa_member set member_name="' . $params['member_name'] . '",member_phone="' . $params['member_phone'] . '"  where id =' . $params['id'];

            $this->dbSource->connect($this->dbConfig);

            $res = $this->dbSource->query($sql);
            //打印结果
            var_dump($res);
            //如果是false,表示出错
            if ($res === false) {
                //打印报错原因
                var_dump($this->dbSource->errno, $this->dbSource->error);
                return;
            }
        });
    }

定义要修改的内容和指定id

$member_edit = array(
    'id' => 1,
    'member_name' => '奇葩天地网',
    'member_phone' => 'www.qipa250.com'
);
$mysql->edit($member_edit);

在这里插入图片描述数据库的字段设置的长度不够,修改数据库结构
原有的
在这里插入图片描述改成现有的
在这里插入图片描述再去执行
在这里插入图片描述会看到true,再查询数据库中

在这里插入图片描述
修改成功

第五步:删除

    //删除指定id的数据
    public function delete($id)
    {
        Co\run(function () use ($id) {


            echo $sql = '  delete from qipa_member  where id =' . $id;
            echo PHP_EOL;
            $this->dbSource->connect($this->dbConfig);

            $res = $this->dbSource->query($sql);
            var_dump($res);
            if ($res === false) {
                //打印报错原因
                var_dump($this->dbSource->errno, $this->dbSource->error);
                return;
            }
        });
    }

传入错误的值

$id = '4i4';
$mysql->delete($id);

打印报错
在这里插入图片描述在这里插入图片描述数据库中有三条记录,我们把id=4的记录删掉

传入正确的值

$id = 4;
$mysql->delete($id);

在这里插入图片描述
数据库中已经删掉id=4的记录
在这里插入图片描述

第六步:事务

数据库中用户1和用户2,各有100元
操作:将id等于1的用户钱减少50元,值为50,id等于2的用增加50,值为150 若是失败,则回滚
在这里插入图片描述

事务方法

   //事务
    public function transaction($edit_data)
    {
        Co\run(function () use ($edit_data) {

            //数据库中用户1和用户2,各有100元
            //操作:将id等于1的用户钱减少50元,值为50,id等于2的用增加50,值为150
            //链接数据库
            $this->dbSource->connect($this->dbConfig);
            //开始事务
            $this->dbSource->begin();


            echo $sql_from = '  update qipa_money set money=50  where member_id =' . $edit_data['from_id'];
            echo PHP_EOL;

            echo $sql_to = '  update qipa_money set money="www.qipa250.com"  where member_id =' . $edit_data['to_id'];
            echo PHP_EOL;

            //执行第一条数据
            $res_from = $this->dbSource->query($sql_from);
            var_dump($res_from);
            if ($res_from === false) {
                //打印报错原因
                var_dump($this->dbSource->errno, $this->dbSource->error);
                //如果报错,回滚数据
                $this->dbSource->rollback();
                return;
            }

            //执行第二条数据
            $res_to = $this->dbSource->query($sql_to);
            var_dump($res_to);
            if ($res_to === false) {
                //打印报错原因
                var_dump($this->dbSource->errno, $this->dbSource->error);
                //如果报错,回滚数据
                $this->dbSource->rollback();
                return;
            }

            //提交数据
            $this->dbSource->commit();


        });
    }

执行报错,发现第一条执行成功,true,第二条返回false失败,并打印了失败原因
在这里插入图片描述
查询数据库中 发现并没有变化
在这里插入图片描述

我们将第二条sql语句修改正确

 echo $sql_to = '  update qipa_money set money=150  where member_id =' . $edit_data['to_id'];

再去执行命令
在这里插入图片描述发现两条数据都返回成功,查看数据库中

在这里插入图片描述
发现已经更新成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值