PHP MySQL SQL-парсер (INSERT и UPDATE) - PullRequest
11 голосов
/ 12 ноября 2008

Я хочу проанализировать SQL-запросы INSERT и UPDATE MySQL в PHP, чтобы определить, какие изменения были внесены в исходные данные. Теперь это было бы довольно легко создать, но я хочу посмотреть, существуют ли в PHP какие-либо существующие библиотеки для этого.

По сути, у меня есть таблица со всеми вышеуказанными запросами, которые были выполнены в базе данных. Я уже выделил имя таблицы и тип запроса. Я рассчитываю создать полный журнал изменений для просмотра пользователями на основе этих данных, поэтому мне нужно получить значения исходного INSERT, а затем изменения, которые вносятся в каждое ОБНОВЛЕНИЕ. В конце мне нужно имя поля и новое значение, а также идентификатор записи. Я сделаю остальную часть проверки / украшения, включая имя столбца для удобочитаемого человеком, и если значение поля фактически не изменилось.

На данный момент, мне, вероятно, не нужно делать ОБНОВЛЕНИЕ нескольких таблиц, но это было бы полезно.

Какие библиотеки существуют для этого?

Ответы [ 6 ]

5 голосов
/ 12 ноября 2008
3 голосов
/ 06 января 2009

Немного не в тему, но, возможно, стоит подумать:

Начиная с MySQL 5.0, поддержка триггеров довольно хорошая. Если вы хотите сохранить записи о том, какие изменения были внесены в базу данных, вместо сохранения операторов sql, вы также можете определить триггеры вставки / обновления и определить другую таблицу, в которой эти значения могут храниться. Вы можете, например, создать простую таблицу с полями

timestamp, user, field, old_value, new_value

и вставляйте соответствующие значения всякий раз, когда возникает DML в одной из ваших просматриваемых таблиц. Чтобы упростить это еще больше, вы можете добавить поле

table

в «таблицу отслеживания» для хранения всех изменений во всех просматриваемых таблицах в одном месте.

См. Руководство MySQL для получения дополнительной информации по этой теме.

2 голосов
/ 09 апреля 2009

Вы можете дать ему шанс: SQL-анализ и компиляция

1 голос
/ 25 января 2009
1 голос
/ 05 января 2009

В двух словах, я обнаружил, что пакет PEAR: SQL_Parser предоставил самое чистое краткосрочное решение, тогда как пакет PEAR: PHP_Parser_Generator (генератор, который использует FSQL) выглядит как действительно надежное долгосрочное решение.

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

1 голос
/ 13 ноября 2008

Facebook выпустила PHP-версию с открытым исходным кодом своего FQL-парсера . Из того, что у меня было, было довольно аккуратный код. Вы могли бы взломать это для работы с обычным SQL.

...