企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# swoole\_get\_mysqli\_sock [TOC] 用于获取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](https://github.com/swoole/swoole-src/blob/master/examples/mysql_proxy_server.php)。 ## 异步并行MySQL是否只用1个连接即可? 这是错误的理解,即使是异步MySQL也需要一个连接池。正如上一条信息所示,并发SQL必须有多个连接。