[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: UPDATE, INSERT, DELETE MySQL - без ожидания ответа
Helram
Привет, можно ли сделать запрос так чтоб php не ожидал ответа от MySQL, пример:


//Здесь какие то действия

//Здесь запрос - в данном случае нам не важно будет ли ошибка mysql либо запрос выполнится, мне главное чтоб PHP не ожидал ответ от MySQL - а просто отправив запрос продолжал дальнейшую работу.

mysql_query("INSERT `table` SET `a`=1");


//Здесь другие действия

walerus
Что значит не ждал?, он и не ждет... доли секунды я надеюсь не считается...
waldicom
Можно выделить запрос в отдельный процес (например exec с передачей вывода куда- либо), тогда php не будет ждать. Вот только как ты собираешься получить результаты (если они нужны)?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
AllesKlar
Helram
Не слушай никого, все втирают дичь (С)
Свернутый текст


Включаем мозг и оптимизируем алгоритм.
Задача:
- не дожидаться ответа от базы, при отправке запроса.

Условия и допущения:
- если запрос закончился с ошибкой (не было вставки), то нас это устраивает.

Следовательно, раз данные нам не важны, то ими можно принебречь.
Два варианта:

v.1.0
if(false) {
mysql_query("INSERT `table` SET `a`=1");
}


v.1.1
// mysql_query("INSERT `table` SET `a`=1");


PROFITT!!!

Более продвинутый вариант:
v.2.0
if(time() >= 1514764800 &&  time() <= 1515542400) { // всё равно все бухают
mysql_query("INSERT `table` SET `a`=1");
}


_____________
[продано копирайтерам]
walerus
AllesKlar
Цитата
Не слушай никого, все втирают дичь (С)

laugh.gif

Мне понравился алгоритм v.2.0, но ... я не пью cool.gif
arbuzmaster
Делай так как сказал waldicom другого пока не придумали! Есть еще вариант с многопоточным curl но он здесь не подойдет и сожрет много ресурсов, да и все равно остановит скрипт на время своего выполнения! Я делал через exec (wget), только вывод делай в null иначе засрется весь диск файлами! wink.gif

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
waldicom
вариант 2.0 отстой, ибо не учитывает географическое местоположение и состояние нестояния вызывающего.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
sergeiss
Helram, можно выполнить такой запрос внутри отдельного потока в ПХП. Тогда он не будет тормозить основной поток. И даже если запрос будет сложный и будет выполняться относительно долго, то за время его выполнения в основном потоке можно успеть сделать много чего полезного/нужного/ненужного. Да еще потом основной поток может получить инфу о выполнении запроса.

Более подробно тут https://habrahabr.ru/post/300952/, например.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
Цитата (waldicom @ 31.12.2017 - 12:48)
вариант 2.0 отстой, ибо не учитывает географическое местоположение и состояние нестояния вызывающего.
Не соглашусь! Кто празднику рад, тот наконуне пьян!


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Helram
Цитата (walerus @ 31.12.2017 - 04:30)
Что значит не ждал?, он и не ждет... доли секунды я надеюсь не считается...

Да доля секунды, но я не хочу её ждать, если бы был один два пять запросов то ок - я бы даже тему не создавал, а если таких запросов 50? У меня таблицы InnoDB и обрабатываются такие запросы не так уж и быстро, 150мс+- понадобится на выполнение - я хочу это обойти.
Helram
Цитата (waldicom @ 31.12.2017 - 06:47)
Можно выделить запрос в отдельный процес (например exec с передачей вывода куда- либо), тогда php не будет ждать. Вот только как ты собираешься получить результаты (если они нужны)?

Попробую, протестирую.
Как обычно select когда понадобятся - они нужны не сразу, а через определенное время.
Helram
Цитата (AllesKlar @ 31.12.2017 - 15:24)
Не слушай никого, все втирают дичь (С)

Чушь как раз написали вы!
Helram
Цитата (sergeiss @ 31.12.2017 - 17:08)
Helram, можно выполнить такой запрос внутри отдельного потока в ПХП. Тогда он не будет тормозить основной поток. И даже если запрос будет сложный и будет выполняться относительно долго, то за время его выполнения в основном потоке можно успеть сделать много чего полезного/нужного/ненужного. Да еще потом основной поток может получить инфу о выполнении запроса.

Более подробно тут https://habrahabr.ru/post/300952/, например.

Воо) это то что мне нужно! спасибо)
killer8080
Цитата (arbuzmaster @ 31.12.2017 - 15:20)
Делай так как сказал waldicom другого пока не придумали!

в новогоднюю ночь всё возможно!!! user posted image
Асинхронные запросы к MySQL
http://php.net/manual/ru/mysqli.poll.php
$link1 = mysqli_connect();
$link1->query("SELECT 'test'", MYSQLI_ASYNC);
$all_links = array($link1);
$processed = 0;
do {
$links = $errors = $reject = array();
foreach ($all_links as $link) {
$links[] = $errors[] = $reject[] = $link;
}
if (!mysqli_poll($links, $errors, $reject, 1)) {
continue;
}
foreach ($links as $link) {
if ($result = $link->reap_async_query()) {
print_r($result->fetch_row());
if (is_object($result))
mysqli_free_result($result);
} else die(sprintf("Ошибка MySQLi: %s", mysqli_error($link)));
$processed++;
}
}
while ($processed < count($all_links));


Helram
вот целесообразность делать insert в асинхронных запросах весьма сомнительна, ну поэкспериментируй, потом нам расскажешь user posted image


Всех с наступающим!!!


user posted image

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.