Перейти к контенту

cache_add_query / cache_exec_query


Рекомендуемые сообщения

В скрипте во многих местах формируется одинаковый, довольно большой sql-запрос. Он составляет из множества конструкций UPDATE, DELETE и т.п. Запрос формируется с помощью cache_add_query и выполняет в конце cache_exec_query.

 

Всё бы хорошо, но mysql не переваривает того, что IPB в итоге ей пытается скормить. Попытки разделять запросы пробелами/точкой с запятой/символов перевода строки не помогают.

 

Таким образом, хочу получить реализацию:

$DB->cache_add_query( ... );
$DB->cache_add_query( ... );
$DB->cache_add_query( ... );

$DB->cache_exec_query();

Это возможно или придётся после каждого cache_add_query делать cache_exec_query? Нелогично как-то.[1125991911:1125999690]В общем, поэкспериментировал и пришёл к грустному выводу, что через PHP одной пачкой несколько запросов вообще никак не отправить :D Странно, что IPS не предусмотрела возможность «накапливать» запросы, а потом их парсировать и по одному выполнять.

Ссылка на комментарий
Поделиться на других сайтах

А причём тут IPS ?

Запросы выполняет не IPS, а MySQL. И php здесь кстати, тоже не причём. Он выполняет только роль передающего звена.

Ссылка на комментарий
Поделиться на других сайтах

Song, а причём тут mySQL? Насколько я понимаю, ни одна СУБД не выполняет несколько запросов в рамках одного пакета. Соответственно, разработчику нужно накапливать запросы в каком-нибудь массиве и выполнять по одному. Или накапливать в переменной, парсировать и опять-таки выполнять по одному.

 

Покопался в драйвере IPS (GiV — версия форума 2.0.4). Вывод: cache_add_query() просто плюсует передаваемый ей запрос к cur_query, cache_exec_query() / cache_shutdown_exec() — вызывает simple_exec(), а тот, с свою очередь — query(). В ней:

$this->query_id = [b]mysql_query[/b]($the_query, $this->connection_id);

Механизма накопления запросов не вижу. Если проглядел — поправьте, пожалуйста.

Ссылка на комментарий
Поделиться на других сайтах

Для создании цепочки запросов, выполняющихся единым блоком при окончании работы скрипта необходимо использовать

cache_shutdown_exec();

 

cache_add_query(); используется для выполнения запросов из классов sql комманд (./sources/sql/*)

Ссылка на комментарий
Поделиться на других сайтах

Ясно. Нет, по «окончанию работы» тут не совсем подходит. Но за подсказку спасибо. :D
Ссылка на комментарий
Поделиться на других сайтах

а.. так проблема в том, что IPS передаёт запросы на исполнение в виде "запрос_1;запрос_2;запрос_3" и т.д. ?
Ссылка на комментарий
Поделиться на других сайтах

Да, так. Причём, в одном пакете и без каких-либо разделителей. Хотя последнее неважно. :D
Ссылка на комментарий
Поделиться на других сайтах

Ну так только по одному.

cache_shutdown_exec() мне кажется их тоже по одному выполняет, просто последовательно.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

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

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.