Coroutine\MySQL

启用协程MySQL客户端

  • 请勿同时使用异步回调和协程MySQL

使用示例

$swoole_mysql = new Swoole\Coroutine\MySQL();
$swoole_mysql->connect([
    'host' => '127.0.0.1',
    'port' => 3306,
    'user' => 'user',
    'password' => 'pass',
    'database' => 'test',
]);
$res = $swoole_mysql->query('select sleep(1)');

defer特性

请参考并发Client一节。

存储过程

4.0.0版本后, 支持MySQL存储过程和多结果集获取

MySQL8.0

Swoole-4.0.1或更高版本支持了MySQL8所有的安全验证能力, 可以直接正常使用客户端,而无需回退密码设定


4.0.1 以下版本

MySQL-8.0默认使用了安全性更强的caching_sha2_password插件, 如果是从5.x升级上来的, 可以直接使用所有MySQL功能, 如是新建的MySQL, 需要进入MySQL命令行执行以下操作来兼容:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;

将语句中的 'root'@'localhost' 替换成你所使用的用户, password 替换成其密码.

如仍无法使用, 应在my.cnf中设置 default_authentication_plugin = mysql_native_password


  • 挖坑人

    ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Maximum function nesting level of '256' reached, aborting! in index.php on line 3.

  • 张良晖

    没有语言层面的coroutine的基本语义,在connect,query函数内部隐藏了事件循环,那连接池也只能在swoole里实现吧。PHP层面还是没法实现连接池,连接池满了,申请连接的操作不能阻塞,又没法实现轮询。没有连接池,异步的优势又被mysql的并发能力限制住了

  • 泷涯

    去掉xdebug

  • copy

    PHP Warning: Swoole\Coroutine\MySQL::query(): mysql client is waiting response, cannot send new sql query.不能连续执行两个查询?文档要是再清楚点就好了,简直不知道从何下手解决这个问题

  • copy

    问题解决 每次执行下$ws->mysql->recv();就可以了

  • 谁爱这不息的变幻

    zm_deactivate_swoole (ERROR 503): Fatal error: Maximum function nesting level of '256' reached, aborting! in /Users/gaomingjun/Developer/Workspace/zhuoyicp/lumen/vendor/laravel/lumen-framework/src/Concerns/RegistersExceptionHandlers.php on line 58. [2017-04-28 11:39:35 $78402.0] WARNING swManager_check_exit_status: worker#3 abnormal exit, status=255, signal=0

  • copperfield

    要实现连接池,还得自己实现一个php调度 协程,所以目前这个新特性只能算是一点餐后小甜点

  • 没有escape_string方法吗

  • 吾爱

    没有close方法吗

  • 活着

    有defer特性~!