PHP MYSQLI_ASYNC插入查询并继续

时间:2018-04-24 10:22:33

标签: php mysqli mariadb php-7.2

使用

后,有没有办法在PHP7.2脚本中继续使用
List<IFileSpec> fromFiles = FileSpecBuilder.makeFileSpecList("source/...@<changelist>,<changelist>");
List<IFileSpec> toFiles = FileSpecBuilder.makeFileSpecList("destination/...");
for (IFileSpec file : fromFiles) {
    client.integrateFiles(file, toFiles, opts);
    client.resolveFilesAuto(toFiles, resolvOptions);
}

作为延迟插入的手段?

现在给出 当我的脚本继续并执行下一个查询时$sql = "INSERT INTO `table` SET `a` = 'aaa'; $result = mysqli_query($link,$sql,MYSQLI_ASYNC); // $result is always 'true'

我使用innodb所以Commands out of sync; you can't run this command now无法正常工作,尽管我从PHP脚本角度寻找相同的行为。 (部署查询,不要等待它被处理)

我是否需要使用单独的脚本和消息代理(例如RabbitMQ)将其与InnoDB数据库联系起来?

2 个答案:

答案 0 :(得分:0)

没有充分理由异步运行INSERT;它可能非常快。

同样适用于UPDATEDELETE,除非有数百万行正在更新或删除。

答案 1 :(得分:-1)

是的,AddHandler ...将立即从VirtualHost返回。

但是,当您运行下一个查询时,MySQL / MariaDB会话可能仍然很忙,这将为您显示“ 命令不同步”错误。

所以,你必须照顾

  • 等待(未知)时间,然后再运行其他查询
  • 在异步查询完成之前,不要在该会话上调用MYSQLI_ASYNC,否则,连接会失败
  • 据我所知,甚至不让PHP脚本结束,因为它隐式调用了mysqli_query()

结论是:不要使用mysqli_close(),除非您处于非常罕见的环境中,该环境使用多个并行连接,决不让连接终止,并且在同一会话上不触发任何进一步的查询。 / p>