2013-03-18 62 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