5

使用后有没有办法在 PHP7.2 脚本中继续

$sql = "INSERT INTO `table` SET `a` = 'aaa';
$result = mysqli_query($link,$sql,MYSQLI_ASYNC);
// $result is always 'true'

作为延迟插入的一种方式?

它现在给出 Commands out of sync; you can't run this command now我的脚本继续执行并执行下一个查询的时间。

我正在使用 innodb 所以一个INSERT DELAYED不起作用,尽管我正在从 PHP 脚本的角度寻找相同的行为。(部署查询,不要等待它被处理)

我是否需要使用单独的脚本和消息代理(例如 RabbitMQ)来使用 InnoDB 数据库实现这一点?

4

2 回答 2

-2

是的,MYSQLI_ASYNC将立即从mysqli_query().

但是当你运行下一个查询时,MySQL/MariaDB 会话可能仍然很忙,这会给你一个“ Commands out of sync ”错误。

所以,你必须照顾

  • 在运行进一步查询之前等待(未知)时间
  • 在异步查询完成之前不要调用mysqli_close()该会话,否则连接错误
  • mysqli_close()据我所知,甚至不让 PHP 脚本结束,因为它隐式调用。

结论是:不要使用MYSQLI_ASYNC,除非您处于一个非常罕见的环境中,该环境使用多个并行连接,永远不会让连接结束,并且不会在同一个会话上触发进一步的查询。

于 2019-10-16T13:30:34.880 回答
-3

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

UPDATEor同上DELETE,除非有数百万行被更新或删除。

于 2018-05-16T16:38:21.440 回答