2008-11-12 5 views
10

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

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

На данный момент мне, вероятно, не нужно делать несколько таблиц UPDATE, но это было бы полезно.

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

ответ

5
+0

грушу пакет очень зеленый и даже не v1.0, хотя. – 2010-11-19 17:38:27

+0

Ваша вторая ссылка больше не действительна. – mellamokb 2011-10-20 02:51:39

+1

@mellamokb: исправлено – 2011-10-20 07:26:46

1

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

1

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

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

3

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

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

timestamp, user, field, old_value, new_value 

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

table 

к «отслеживания таблицы», чтобы сохранить все изменения во всех отслеживаемых таблиц в одном месте.

См. MySQL manual для получения дополнительной информации об этой теме.