提问人:Sergeant 提问时间:4/24/2018 更新时间:10/16/2019 访问量:1555
PHP MYSQLI_ASYNC 插入查询并继续
PHP MYSQLI_ASYNC Insert Query and continue
问:
有没有办法在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,所以 an 不起作用,尽管我从 PHP 脚本的角度寻找相同的行为。(部署查询,不要等待它被处理)INSERT DELAYED
我是否需要使用单独的脚本和消息代理(例如 RabbitMQ)来使用 InnoDB 数据库来实现这一点?
答:
-3赞
Rick James
5/17/2018
#1
没有充分的理由异步运行;它可能非常快。INSERT
同上 或 ,除非有数百万行被更新或删除。UPDATE
DELETE
评论
1赞
Sergeant
5/18/2018
有一个很好的理由,当你有一个具有主-主设置的复制后端时,插入行时会有一个小的延迟,因为它可以确保所有数据库都同步。我不希望我的 php 脚本等待它,因为我对查询的结果不感兴趣。
0赞
Rick James
5/18/2018
@Sergeant - 你真的是指大师-大师吗?如果是这样,则该配置不是同步的。“半同步”可能有问题;如果节点在地理上分散开来,Galera可能会有问题。
-2赞
Anse
10/16/2019
#2
是的,会立即从 返回。MYSQLI_ASYNC
mysqli_query()
但是,当您运行下一个查询时,MySQL/MariaDB 会话可能仍然繁忙,这将为您提供“命令不同步”错误。
所以,你必须关心
- 在运行进一步查询之前等待(未知)时间
- 在异步查询完成之前不调用该会话,否则连接 barfs
mysqli_close()
- 甚至不让PHP脚本结束,因为据我所知,这隐含地调用。
mysqli_close()
结论是:不要使用 ,除非您处于一个非常不常见的环境中,该环境使用多个并行连接,从不让连接结束,并且不会在同一会话上触发进一步的查询。MYSQLI_ASYNC
评论