![]() |
+7 (495) 229-0436 | ![]() |
shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 | ![]() |
![]() |
![]() |
|
|
Слежение за изменениями данных в MySQL при помощи PHP05.10.2012 13:43
Aleks_ja
А что если к такой замечательной возможности MySQL как создание триггеров, способных записывать старые и новые значения данных при вставке, изменении и удалении записей добавить информацию, которой обладает php скрипт? Триггеры MySQL знают: PHP знает: Каким же способом можно умудриться записать всю необходимую информацию? MySQL умеет создавать временные таблицы, которые живут только пока коннект к бд не закроется, а PHP как раз при открытии каждой страницы - создаёт новый коннект (в абсолютном большинстве конфигураций вебсервера и php). Таким образом, если триггер будет писать ещё и во временную таблицу - мы сможем узнать кто или что в ответе за конкретные изменения. Чуть подробнее - мы можем вначале страницы создавать временную таблицу, если триггер срабатывает, он записывает информацию в таблицу предназначенную для слежения за данными, а айдишники, которые возвращает last_insert_id() записывать во временную таблицу. При завершении работы обращаемся к временной таблице, и если она не пуста - записываем в таблицу изменений всё что хотим из того что знает загруженная PHP страница. Далее - вариант реализации. 1) Начнём с временной таблицы - мы можем её создавать, когда триггер выполняется на странице в первый раз! Для этого нужно всего лишь написать CREATE TEMPORARY TABLE temp_watch_changes IF NOT EXISTS. Есть только небольшая проблема - в текущих версиях MySQL невозможно узнать существует ли временная таблица каким-либо запросом. Поэтому, она обязательно должна быть создана, чтобы не было ошибки, когда через php мы будем выбирать значения. Мы может потрюкачить, а можем всё сделать прямолинейно. В качестве небольшого трюка - в MySQL может одновременно существовать таблица обычная и временная с одинаковым именем. Если есть временная - то будет использоваться именно она. И каждый раз из пхп проверяя есть ли записи внутри таблицы temp_watch_changes там будет либо пусто, либо айдишники записанные триггером и никаких ошибок. Более прямолинейный метод - просто создавать временную таблицу каждый раз при загрузке страницы. На нашем сервере это занимает 0.0008 секунд, что впринципе приемлемо :)
2) Создаём таблицу, содержащую сами изменения
3) Создаём триггер. Выяснить, можно ли динамически использовать названия колонок в триггерах - не удалось. Наверное, просто нельзя, но нам это не сильно и нужно. Ведь есть PHP.
Сама функция создания могла быть по-лучше в плане читаемости. Она создаёт 3 триггера - на update, insert, delete. Принимает название таблицы, колонок за которыми следить и ключ по которому можно найти эту запись (может быть и несколько ключей). Вызываться может так:
4) Теперь сделаем так, чтобы после того, как PHP страница отработает обработались данные из временной таблицы. Воспользуемся register_shutdown_function, которая позволяет выполнить любую функцию по завершении скрипта. На любом проекте есть файл, который инклюдится всегда - туда её и разместим.
Вот и всё. Ссылки по теме
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |