PHP MySQL SQL ayrıştırıcı (INSERT ve UPDATE)

4 Cevap php

Ben ne orijinal verilerinden yapılan nerede nelerin değiştiğini belirlemek için PHP INSERT ve UPDATE MySQL SQL sorguları ayrıştırmak için arıyorum. Şimdi bu oluşturmak oldukça kolay olurdu, ama ben bunu yapmak için PHP varolan herhangi kütüphaneler olup olmadığını görmek istiyorum.

Temelde ne var, bir veritabanı üzerinde çalışacak olan yukarıdaki sorguları tüm bir tablodur. Zaten tablo adı ve sorgu türünü ayrıldık. Ben bu verilere dayanarak kullanıcı görüntüleme için tam bir değişiklik günlüğü oluşturmak için arıyorum, bu yüzden orijinal INSERT ve sonra her GÜNCELLEME yapılan değişikliklerin değerlerini almak gerekir. Sonunda alan adı ve yeni değer ve kayıt id (ler) gerekiyor. Ben insan okunabilir ve bir alan değeri aslında değişmedi eğer sütun adı da dahil olmak üzere, kontrol / güzelleştirici kalan yapacağız.

Şu anda, ben büyük olasılıkla birden fazla tablo UPDATE adlı yapmanız gerekmez, ama o yararlı olacaktır.

Bunu yapmak için orada ne kütüphaneler vardır?

4 Cevap

Sorusuna kapalı biraz, ama belki de düşünmeye değer bir öneri:

MySQL 5.0 yana, tetikleyiciler için destek oldukça iyidir. Yerine sql ifadeleri depolamak, ayrıca ekleme / güncelleştirme tetikler tanımlamak ve bu değerler saklanabilir bir başka tablo tanımlayabilir, bir veritabanına yapılmış ne gibi değişiklikler bir kaydını tutmak istiyorsanız. Siz, örneğin alanları olan basit bir tablo oluşturmak olabilir

timestamp, user, field, old_value, new_value

and insert the respective values whenever a DML on one of your watched tables occured. To simplify this even more, you could add the field

table

tek bir yerde tüm izledi tablolar tüm değişiklikleri saklamak için "izleme tablosuna".

MySQL manual Bu konu hakkında daha fazla bilgiler için bkz.

Facebook kendi FQL parser bir açık kaynak PHP sürümünü yayımladı. Ben oldukça düzgün kod oldu ne. Muhtemelen düzenli SQL ile çalışmak için bu kesmek olabilir.

SQL_Parser paket ARMUT iken temiz kısa vadeli çözüm sunmuştur: PHP_Parser_Generator paketi (FSQL kullandığı jeneratör) gerçekten sağlam bir uzun vadeli bir çözüm gibi görünüyor Özetle, ben PEAR bulundu.

Ben txtSQL yeterince güçlü değildi ve en azından benim görüşüme göre, kullanarak gerektirecek yeterince SQL ayrıştırmak yoktu bulundu.