【问题标题】:PHP: mysql_query without waiting [duplicate]PHP:mysql_query无需等待[重复]
【发布时间】:2013-03-18 13:08:29
【问题描述】:

首先,我故意使用已弃用的mysql 函数(而不是mysqli),所以请不要告诉我我应该更改为mysqli

我的问题是:如果我想执行 INSERT 或 UPDATE 并立即继续处理 PHP 脚本,而不等待 MySQL 完成任务,我可以使用mysql_unbuffered_query(这是做什么的吗?)或者如果不是,我怎样才能做到这一点?

【问题讨论】:

  • @MikeB,我的问题实际上是 mysql_unbuffered_query 是否这样做,所以这与那个问题没有回答我的问题不同。
  • 那么你的答案是否定的。 mysql_unbuffer_query() 仍然等待查询执行,它只是不经历获取结果的麻烦。 php.net/manual/en/mysqlinfo.concepts.buffering.php
  • 如果你有兴趣,我写了关于如何在后台执行查询。也许它会帮助你或给你一个想法:hancic.info/run-sql-queries-in-the-background-with-php
  • @jan 你可以在这里发布到 gearman 的链接,这样可以节省大量时间阅读你的文章,只是说你使用了它。

标签: php mysql


【解决方案1】:

很抱歉打断你:)

如果您使用 mysqli 和 mysqlnd 驱动程序,您可以将 MYSQLI_ASYNC 选项传递给 query() 方法。无缓冲查询在这里没有帮助。

稍后您可以使用poll()reap_async_query() 来获得结果。

【讨论】:

  • 我知道有人会坚持提及mysqi,尽管我开始发帖时特别提到我不在乎。
  • @Alasdair:好吧,我想指出这一点,因为这是真正异步查询起作用的第一个地方。如果您不关心安全问题(这很愚蠢),那么这仍然是升级的好理由。
  • @Alasdair 只是作为一个提示,您也可以只在一小部分中使用 mysqli,而无需更新整个应用程序以使用它:)
【解决方案2】:

您可以使用 INSERT...DELAYED 进行异步插入 (1)。我不相信您可以在不借助产生另一个进程 (2) 的情况下执行异步 UPDATE

(1) 但不适用于InnoDB

(2) 如果坚持旧的mysql 扩展是绝对要求

【讨论】:

  • 请注意,这不适用于所有存储引擎。
  • @Louis-PhilippeHuberdeau 是的,谢谢提醒
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多