2008-11-12 35 views
10

Estoy buscando analizar INSERT y ACTUALIZAR las consultas SQL de MySQL en PHP para determinar qué cambios se realizaron a partir de qué datos originales. Ahora esto sería bastante fácil de crear, pero quiero ver si hay bibliotecas existentes en PHP para hacer esto.PHP MySQL SQL parser (INSERTAR y ACTUALIZAR)

Básicamente lo que tengo es una tabla con todas las consultas anteriores que se han ejecutado en una base de datos. Ya he separado el nombre de la tabla y el tipo de consulta. Estoy buscando crear un registro de cambios completo para la visualización del usuario en base a estos datos, por lo que necesito obtener los valores del INSERT original y los cambios que se realizan en cada ACTUALIZACIÓN. Al final, necesito el nombre del campo y el nuevo valor, y con la (s) identificación (es) del registro. Haré el resto de la revisión/embellecimiento, incluido el nombre de la columna para lectura humana y si el valor de un campo no ha cambiado en realidad.

Por el momento, probablemente no necesite hacer varias ACTUALIZACIONES de tabla, pero sería útil.

¿Qué bibliotecas hay para hacer esto?

Respuesta

1

Facebook lanzó una versión de PHP de código abierto de su FQL parser. Por lo que yo era, era un código bastante bueno. Posiblemente puedas hackear eso para trabajar con SQL regular.

+3

No encuentro el paquete que menciona. ¿Puedes proporcionar un enlace más preciso? –

1

En pocas palabras, encontré que el paquete PEAR: SQL_Parser ha proporcionado la solución más limpia a corto plazo, mientras que el paquete PEAR: PHP_Parser_Generator (el generador que usa FSQL) parece una solución robusta a largo plazo.

Encontré que txtSQL no era lo suficientemente robusto y no analicé SQL lo suficiente como para justificar el uso, al menos en mi opinión.

+0

Parece que ha reemplazado su blog con fotos aleatorias. Los [errores abiertos] (http://pear.php.net/bugs/search.php?cmd=display&package_name [] = SQL_Parser & status = OpenFeedback & bug_type = Bugs) en el analizador PEAR SQL me tienen preocupado. Parece que han creado un analizador SQL genérico sin demasiada atención especial para MySQL. – mpen

3

Un poco fuera de la pregunta, pero tal vez una sugerencia vale la pena pensar:

Desde MySQL 5.0, el soporte para disparadores es bastante bueno. Si desea mantener un registro de los cambios que se han realizado en una base de datos, en lugar de almacenar las sentencias sql, también puede definir desencadenantes de inserción/actualización y definir otra tabla en la que puedan almacenarse estos valores. Se podría, por ejemplo, crear una tabla sencilla que tiene los campos

timestamp, user, field, old_value, new_value 

e insertar los valores respectivos siempre que sea un LMD en una de sus mesas vistos ocurrido. Para simplificar esto aún más, se podría añadir el campo

table 

a la "tabla de seguimiento" para guardar todos los cambios a todas las tablas vistos en un solo lugar.

Consulte el MySQL manual para obtener más información sobre este tema.

Cuestiones relacionadas