加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP MySQLi异步查询

发布时间:2020-12-13 18:22:36 所属栏目:PHP教程 来源:网络整理
导读:我试图通过 PHP MySQLi使用异步查询. 以下代码已经简化,原始代码太冗长了,因为类依赖性和所有这些,所以在这里列出.另外请假设已经设置了mysqli_handle连接的引用. $query_1 = "SHOW TABLES FROM moxedo";$query_2 = "CREATE TABLE `moxedo`.`mox_config_n85a
我试图通过 PHP MySQLi使用异步查询.

以下代码已经简化,原始代码太冗长了,因为类依赖性和所有这些,所以在这里列出.另外请假设已经设置了mysqli_handle连接的引用.

$query_1 = "SHOW TABLES FROM moxedo";
$query_2 = "CREATE TABLE `moxedo`.`mox_config_n85ad3` (`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,`group_id` INT(3) UNSIGNED NOT NULL,`is_enabled` INT(1) UNSIGNED NOT NULL,`tag` VARCHAR(255) NOT NULL,`name` VARCHAR(80) NOT NULL,`value` VARCHAR(255) NOT NULL,`description` TEXT NOT NULL,`init_params` TEXT NOT NULL,`datetime_added` DATETIME NOT NULL,`datetime_lastmodified` DATETIME NOT NULL,`timestamp_univ` BIGINT(14) NOT NULL,PRIMARY KEY ( `id` ) ) ENGINE = INNODB
";
$query_3 = "ALTER TABLE `moxedo`.`mox_config_n85ad3` ADD UNIQUE `ix_u_tag_oq` ( `tag` )";
$query_4 = "SHOW TABLES FROM moxedo";

if (!$mysqli_stmt_obj = $mysqli_handle->query($query_1)) 
{
   printf("Error: %sn",$mysqli_handle->error);
}

if (!$mysqli_stmt_obj = $mysqli_handle->query($query_2,MYSQLI_ASYNC)) 
{
   printf("Error: %sn",$mysqli_handle->error);
}

if (!$mysqli_stmt_obj = $mysqli_handle->query($query_3,$mysqli_handle->error);
}

if (!$mysqli_stmt_obj = $mysqli_handle->query($query_4)) 
{
   printf("Error: %sn",$mysqli_handle->error);
}

对Query 1的调用通过OK.对查询2的调用也通过OK.

但是,当我尝试执行查询3和查询4时,我得到“命令不同步;你现在无法运行此命令”错误.从我的在线研究中我发现了一些关于使用mysqli_free_result但查询2和查询3的信息不返回结果集.

我需要做什么才能正确完成异步调用,以便我可以进行多次调用而不会出现此错误?

一个老问题,但我之前遇到过这个问题,并希望尽可能提供帮助.

不幸的是,mysqli文档相当缺乏,特别是在这方面.问题是’async’模式是mysql客户端行为,而不是客户端/服务器协议的一部分.也就是说,在给定时间,您仍然只能在连接上运行一个查询(或多个查询). MYSQLI_ASYNC仅指定应用程序在等待查询结果时不应阻止.结果必须在mysqli_poll之后收集.

在您的示例中,$query_1是同步的,因此完全由它返回并分配给$mysqli_stmt_obj完成. $query_2在$mysqli_handle上成功异步启动,并返回而不等待结果.当脚本到达$query_3时,它仍然有等待$query_2的待处理结果.因此,它会尝试在完成最后一个查询之前发送另一个查询,从而使您的“命令不同步”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读