PDO debug class

Door Jelmer -, 13 jaar geleden, 3.180x bekeken

Een uitbreiding op PDO welke alle prepared statements opvangt en opslaat. Bij het weergeven kan je de parameters die je aan je prepared statements hebt gegeven terug laten plaatsen om te zien hoe de query eruit had gezien als je hem zonder placeholders had geschreven. Als het goed is kan hij ook goed overweg met het meerdere malen uitvoeren van hetzelfde statement, maar dan met andere waarden.

Hij neemt ook nog even de tijd op, en het aantal affected rows. Doordat het een uitbreiding van PDO zelf is, kan je hem zo in de plaats van PDO gebruiken.

Verder is er de PDO::dump functie, welke je opgemaakte HTML oplevert. Niet wat je in een klasse zou verwachten, maar wel handig in combinatie met register_shutdown_function.

download: http://phphulp.ikhoefgeen.nl/debug_pdo.phps

Last note: hij doet niet aan foutafhandeling. Aangezien de meesten PDO in combinatie met exceptions gebruiken zou dat geen probleem moeten opleveren.

Update 07-02-2009:
- Hernoemd van PDO_Debug naar Debug_PDO. Is wat logischer wanneer je Poor Man's Namespacing gebruikt (oftewel, autoload + klassenaam als padnaam)
- Ondersteund nu ook anonieme placeholders (de ?'s in je statement)
- Wat advanced features toegevoegd die ik zelf toch graag blijk te gebruiken, zie hieronder.

Met Debug_PDO::add_filter kan je een callback meegeven die beslist of de query wel of niet wordt uitgevoerd. Het eerste argument aan deze callback is een snapshot van de query, het tweede argument mag een reference zijn naar de $success variabele, de return-variabele van Debug_PDO_Statement::execute. Zo kan je bepaalde queries wel verhinderen van uitvoeren, maar je script toch voorhouden dat ze prima lukten.

Debug_PDO::add_listener kan je een callback meegeven welke bij het uitvoeren van een query wordt aangeroepen. Op die manier kan je live meekijken welke queries er door je script worden uitgevoerd. Het eerste en enige argument aan de callback is een snapshot. Merk wel op dat er nog geen begin- en eindtijden beschikbaar zijn in dit snapshot, de callback wordt voor de werkelijke execute aanroep al geroepen, niet na.

Debug_PDO::add_decorator kan je een mooie opmaakfunctie meegeven. Deze wordt aangeroepen voor iedere placeholder die bij Debug_PDO_Snapshot::query_as_sql() wordt vervangen door z'n werkelijke waarde. Is bijvoorbeeld nuttig om hele grote strings in te korten, of HTML opmaak om je waarden te zetten zodat ze beter zichtbaar zijn, html te escapen, of zoals in het voorbeeld hieronder leuke terminal kleurtjes eromheen te plakken.

Gesponsorde koppelingen

PHP script bestanden

  1. pdo-debug-class

 

Er zijn 6 reacties op 'Pdo debug class'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
PHP Newbie
PHP Newbie
13 jaar geleden
 
0 +1 -0 -1
Handig, heel handig!
Joren de Wit
Joren de Wit
13 jaar geleden
 
0 +1 -0 -1
Ziet er weer netjes uit Jelmer! Dit gaat nog wel eens van pas komen...
Klaasjan Boven
Klaasjan Boven
13 jaar geleden
 
0 +1 -0 -1
He Jelmer,

Kan je deze ook omzetten naar OCI_ ?
Jelmer -
Jelmer -
13 jaar geleden
 
0 +1 -0 -1
@Klaasjan http://phphulp.ikhoefgeen.nl/oci_debug.phps Hij is bijna gelijk aan deze, maar ik heb hem nog niet kunnen testen op een echte Oracle database. Ik neem aan dat ik daar dinsdag wel de kans even voor krijg ;)
Klaasjan Boven
Klaasjan Boven
13 jaar geleden
 
0 +1 -0 -1
En the oci_ variant werkt ook prima hebben we vanmiddag gezien nogmaals bedankt Jelmer je mag nog eens weer tegen me Wii'en
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jelmer -
Jelmer -
13 jaar geleden
 
0 +1 -0 -1
Ik heb hem wat uitgebreid met wat actievere functies. Je kan hem nu ook gebruiken als filter, zodat je bepaalde queries wel en niet toe kan laten. Ook kan je de queries live volgen voor als je een lang lopend script hebt (cron job, daemon, etc) of als je de queries over een ander kanaal wilt zien (bijvoorbeeld via de terminal of een logbestand, en niet via de HTML output)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. pdo-debug-class

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.