2013-03-18 2 views
0

Во-первых, я использую устаревшие функции mysql (вместо mysqli) сознательно, поэтому, пожалуйста, не говорите мне, что я должен изменить на mysqli.PHP: mysql_query без ожидания

Мой вопрос: если я хочу сделать INSERT или UPDATE и продолжить обработку PHP-скрипта немедленно, не дожидаясь завершения MySQL задачи, могу ли я использовать mysql_unbuffered_query (это то, что делает?), Или если нет, как я могу это достичь?

+0

@MikeB, Мой вопрос в том, действительно ли это mysql_unbuffered_query, или нет, так что это не тот же вопрос, что и этот вопрос не отвечает на мой вопрос. – Alasdair

+1

Тогда ваш ответ - нет. mysql_unbuffer_query() все еще ждет выполнения запроса, он просто не справляется с проблемой получения результатов. http://www.php.net/manual/en/mysqlinfo.concepts.buffering.php –

+0

Если вам интересно, я написал о том, как выполнять запросы в фоновом режиме. Может быть, это поможет вам или даст вам идею: http://hancic.info/run-sql-queries-in-the-background-with-php –

ответ

3

Вы можете использовать INSERT...DELAYED для асинхронных вставок (1). Я не верю, что вы можете сделать асинхронный UPDATE, не прибегая к нересту другого процесса (2).

(1), но не доступен для InnoDB таблиц

(2), если придерживаться старого mysql расширения является абсолютным требованием

+1

Обратите внимание, что это не будет работать на всех устройствах хранения. –

+0

@ Louis-PhilippeHuberdeau Да, спасибо за головы – RandomSeed

7

Извините разорвать это вам :)

Если вы используйте mysqli, с драйвером mysqlnd, вы можете передать опцию MYSQLI_ASYNC методу query(). Небуферизованные запросы здесь не помогают.

Позже вы можете использовать poll() и reap_async_query(), чтобы получить результат.

+0

Я знал, что кто-то будет настаивать на упоминании 'mysqi', хотя я начал свой пост, специально упоминая, что я НЕ УХОДИТ. – Alasdair

+0

@Alasdair: Ну, я хотел указать на это, потому что это первое место, где работают настоящие асинхронные запросы. Если вас не волнуют проблемы безопасности (что довольно глупо), то это все равно может быть хорошей причиной для обновления в любом случае. – Evert

+1

@Alasdair Как подсказка, вы также можете использовать mysqli только в небольшой части, не обновляя все ваше приложение, чтобы использовать его :) – NikiC

Смежные вопросы