2013-03-18 65 views
0

首先我明明使用了弃用的mysql函数(而不是mysqli),所以请不要告诉我我应该更改为mysqli。我的问题是:如果我想要执行INSERT或UPDATE并立即继续处理PHP脚本,而无需等待MySQL完成任务,那么我可以使用mysql_unbuffered_query(那是什么?),或者如果没有,那么我可以使用mysql_unbuffered_query吗?我怎么能做到这一点?PHP:mysql_query无需等待

+0

@MikeB,我的问题实际上是否mysql_unbuffered_query是否这样做,所以它不是问题不回答我的问题。 – Alasdair 2013-03-18 13:13:34

+1

然后你的回答是否定的。 mysql_unbuffer_query()仍然等待查询执行,它只是没有经历获取结果的麻烦。 http://www.php.net/manual/en/mysqlinfo.concepts.buffering.php – 2013-03-18 13:14:37

+0

如果你对我感兴趣,我写了如何在后台执行查询。也许它会帮助你或给你一个想法:http://hancic.info/run-sql-queries-in-the-background-with-php – 2013-03-18 13:16:02

回答

3

您可以使用INSERT...DELAYED进行异步插入(1)。我不相信你可以做异步的UPDATE的,而不会产生另一个过程(2)。

(1),但不可用于InnoDB

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

+1

请注意,这不适用于所有存储引擎。 – 2013-03-18 13:19:07

+0

@ Louis-PhilippeHuberdeau是的,感谢您的领导 – RandomSeed 2013-03-18 13:21:14

7

不好意思去打破这个给你:)

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

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

+0

我知道有人会坚持提到'mysqi',即使我开始写我的文章,特别提到我不关心。 – Alasdair 2013-03-18 13:17:50

+0

@Alasdair:嗯,我想指出,因为这是真正的异步查询工作的第一个地方。如果你不关心安全问题(这非常愚蠢),那么这仍然是升级的一个很好的理由。 – Evert 2013-03-18 13:26:14

+1

@Alasdair就像一个暗示,你也可以在一些小部分中使用mysqli,而不需要更新整个应用程序来使用它:) – NikiC 2013-03-18 15:43:56