异步MySQL客户端

Swoole1.8.6版本提供了全新的异步MySQL客户端,底层自行实现了MySQL的通信协议,无需依赖其他第三方库,如libmysqlclientmysqlndmysqli等。

1.8.6版本开始Swoole\MySQL已内置到Swoole中,无需通过--enable-async-mysql编译参数开启。

使用实例

$db = new swoole_mysql();
$server = array(
    'host' => '192.168.56.102',
    'port' => 3306,
    'user' => 'test',
    'password' => 'test',
    'database' => 'test',
    'charset' => 'utf8', //指定字符集
    'timeout' => 2,  // 可选:连接超时时间(非查询超时时间),默认为SW_MYSQL_CONNECT_TIMEOUT(1.0)
);

$db->connect($server, function ($db, $r) {
    if ($r === false) {
        var_dump($db->connect_errno, $db->connect_error);
        die;
    }
    $sql = 'show tables';
    $db->query($sql, function(swoole_mysql $db, $r) {
        if ($r === false)
        {
            var_dump($db->error, $db->errno);
        }
        elseif ($r === true )
        {
            var_dump($db->affected_rows, $db->insert_id);
        }
        var_dump($r);
        $db->close();
    });
});

  • 东东

    有新特性 数据库连接池样例吗?

  • qieangel

    可以通过swoole_mysql来模拟

  • 马春龙

    这个异步mysql和http://rango.swoole.com/archives/288 这篇文章讲的是一样的把? 只不过一个是new mysqli 一个是改为swoole内置的

  • Clive

    不知道怎么重连 老是报 mysql client is waiting response, cannot send new sql query.

  • 心灵的架构师

    这是一个连接池的client吧?如果是的话 就直接静态调用了?

  • 小北MVP

    提示异步io只能在cli环境运行!!!请问这是为什么啊

  • 今生有你✅已认证了

    swoole 封装的这个 异步mysql 有什么优势,可以说一下吗。

  • 李尔摩斯

    可以在MySQL查询等待期间来干别的

  • 战神悟空

    异步和pdo能否融合!

  • .世界℡

    其实MySQL异步如果能同时执行多句query 就强大了,现在其实是相对于php 代码的异步,就像上面说的,查询的期间不阻塞,能干其他的东西,当然,这些东西还不能依赖上面的异步查询的结果

  • 盒子

    没啥用 可有可无,什么业务只有一条sql? demo?

  • Y无声息

    异步概念扫盲楼: 首先说同步,同步就是一个查询完了之后才能继续下一个查询。 再说说异步,异步就是发起一个查询,不需要等返回,然后cpu可以去处理其他请求,等到有查询结果事件触发机制唤醒进程,继续处理后面的逻辑。 你想想,在你同步的处理完一个请求的时间段里,异步的在相同的时间可能处理了n个请求。

  • 飞鸿影

    异步的数据库查询功能,执行SQL语句之后不必等待数据库返回结果。继续去执行其他的代码,当数据库返回结果是再对数据进行处理,如渲染页面,并将HTML页面发送给客户端。这样应用程序完全不需要阻塞等待。这种方式运行效率非常高。 http://rango.swoole.com/archives/217

  • 梦里曾经与画眉

    虽然说是可以不等待查询结果继续执行下面的代码,但是下面的业务逻辑需要上面的查询结果啊. 不知道具体的使用场景是什么 ...

  • zzhpeng

    查询作用不大,删除,添加,更新我看作用很大,查询就是要用同步mysql

  • swoole小白

    当我用异步mysql查询表里面10条信息的时候,也返回这个错误, mysql client is waiting response, cannot send new sql query. 有知道答案的吗?求教。

  • swoole小白

    上面那个问题解决了,貌似我调用$db->close();之前return了数据,后面$db->close() 就没执行到。修改如下。在mysql查询到数据之后,数据return之前,调用$db->close();。。。

  • henry.tee

    不知道是不是我用错了,好像只能跟js那样,层层嵌套了,回调地狱。

  • henry.tee

    $db->connect($server, function ($db, $r) { $db->query('show tables', function(swoole_mysql $db, $r) { var_dump($r);

        $db->query('select now()', function(swoole_mysql $db, $r){
            echo json_encode($r);
            $db->close();
        });
    });
    

    });

  • admin

    优势 ?

  • swooler

    欢迎加入Swoole学习交流群 529226009