× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

swoole_get_mysqli_sock

用于获取MySQLi的socket文件描述符。可将mysql的socket增加到swoole中,执行异步MySQL查询。

int swoole_get_mysqli_sock(mysqli $db)

swoole_get_mysqli_sock仅支持mysqlnd驱动,php5.4以下版本不支持此特性
1.8.6或更高版本已移除

示例:

$db = new mysqli;
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query("show tables", MYSQLI_ASYNC);
swoole_event_add(swoole_get_mysqli_sock($db), function($db_sock) {
    global $db;
    $res = $db->reap_async_query();
    var_dump($res->fetch_all(MYSQLI_ASSOC));
    swoole_event_exit();
});

apt-get/yum安装的PHP无法编译通过

建议自行编译PHP,而不是使用apt-get或yum安装,避免因为缺少头文件导致编译不通过。编译PHP时要加入--enable-mysqlnd --with-mysqli

同时并发执行2条以上SQL语句

一个MySQL连接只能执行1条SQL语句,下面的代码是错误的。

$db->query("select * from test", MYSQLI_ASYNC);
$db->query("select * from test", MYSQLI_ASYNC);

在第一条SQL执行后,未调用reap_async_query返回结果前,不能再次执行$db->query()。如果想要并发执行SQL需要创建2个以上MySQL连接,并分别调用swoole_get_mysqli_sock和swoole_event_add,加入到事件循环中。可以参考 https://github.com/swoole/swoole-src/blob/master/examples/mysql_proxy_server.php

异步并行MySQL是否只用1个连接即可?

这是错误的理解,即使是异步MySQL也需要一个连接池。正如上一条信息所示,并发SQL必须有多个连接。


  • free

    这个有什么意义呢,swoole_event_add之后,没有任何返回,怎么使用呢

  • 123

    你要往mysql写日志的时候可以用到

  • 丰灵

    安装了 swoole 为什么这个函数不能用呢 Call to undefined function swoole_get_mysqli_sock()

  • zhouleyu.com

    安装了 swoole 为什么这个函数不能用呢 Call to undefined function swoole_get_mysqli_sock()

  • bjlzt

    Fatal error: Call to undefined function swoole_get_mysqli_sock() ,1.7的版本也不能用

  • Jay_摩卡先生

    PHP Fatal error: Call to undefined function swoole_get_mysqli_sock() in /home/zhoujing/server.php on line 20

    Fatal error: Call to undefined function swoole_get_mysqli_sock() in /home/zhoujing/server.php on line 20

    --enable-async-mysql
    编译时间加了这个个参数还是这样。。。 会是什么原因???

  • Jay_摩卡先生

    [root@i-3q8wsnx8 zhoujing]# php -m [PHP Modules] Core ctype date dom ereg fileinfo filter hash iconv json libxml mysql mysqli mysqlnd pcre PDO pdo_mysql pdo_sqlite Phar posix Reflection session SimpleXML SPL sqlite3 standard swoole tokenizer xml xmlreader xmlwriter

  • 低调丶

    我也需要相同的问题了,你最后怎么解决的?

  • 回忆里的涩瑟小孩

    Call to undefined function swoole_get_mysqli_sock() in /home/wwwroot/test/mysql_server.php on line 5 --enable-async-mysql 也添加了 php5.5的一样不好用

  • 回忆里的涩瑟小孩

    找到解决办法了 Call to undefined function swoole_get_mysqli_sock() 需要在php.ini 里面把proc_open和shell_exec 解e除禁用 或者./configure make以后 make test看一下有没有什么错误

  • 百里行者

    PHP Fatal error: Uncaught Error: Call to undefined function swoole_get_mysqli_sock()

  • 无敌远远

    版本更新了,例子也更新一下吧,现在卡住了