2012-08-05 20 views
5

Sto effettuando la modifica dalle chiamate mysql_* all'utilizzo di chiamate PDO e non riesco a capire come eseguire il debug del mio SQL reale durante lo sviluppo di nuovo codice.Debug di query preparate da PDO con MySQL

Sotto le chiamate mysql_*, potevo scrivere un po 'di SQL in una funzione PHP e echo poteva essere l'effettivo SQL per vedere con che processore stava lavorando.

Non sono stato in grado di trovare una tale bestia nella libreria DOP. debugDumpParams sembra come dovrebbe, ma non restituisce l'istruzione associata.

Esempi di problemi che hanno incontrato:

  1. Nel mio primo tentativo ho era vincolante una stringa ed è stato, tra cui le virgolette nell'istruzione SQL, nonostante vincolante con un data_type di corda - era solo colpo di fortuna ho provato a rimuovere le virgolette dalla dichiarazione; il debug mi avrebbe fatto capire che c'era una citazione ripetuta.

  2. Ho copiato del codice da un progetto a un altro e ho dimenticato per errore di correggere il nome del database. Naturalmente lo SQL ha fallito perché le tabelle non esistevano nell'altro DB. Ma il programma ha appena restituito il risultato falso corretto. Da nessuna parte nei log di PHP o nei log MySQL o da nessuna parte ho avuto l'impressione che il tavolo non esistesse dove lo stavo cercando.

Quindi, come fanno le altre persone a eseguire il debug per le chiamate PDO SQL? Cosa mi manca? :)

+0

Umm, per qualche motivo l'editor ha rimosso il mio secondo esempio: 2. Ho copiato del codice da un progetto a un altro e ho dimenticato per errore di correggere il nome del database. Naturalmente lo sql non è riuscito perché le tabelle non esistevano nell'altro db. Ma il programma ha appena restituito il risultato falso corretto. Da nessuna parte nei log di php o nei logs di mysql o da nessuna parte ho avuto l'impressione che il tavolo non esistesse dove lo stavo cercando. –

+1

Benvenuti in Stackoverflow! –

+0

@LeadeGroot, formattazione corretta. Mette il tuo primo oggetto sulla stessa riga di "Esempi di problemi ...", rendendo il secondo elemento il tuo primo in un elenco ordinato numericamente. Strano. – Brad

risposta

4

Per il primo problema, controllare la query è davvero difficile. Non c'è molto che puoi fare a questo proposito tranne che per registrare le query sul tuo server di database. Il motivo è che le query preparate non stanno (sempre) semplicemente concatenando i dati nella query. Il punto è che i dati vengono inviati separatamente dalla query. È possibile accedere alla stringa di query tramite lo $yourStatement->queryString. Mostrerà solo la query con i parametri.

Per il tuo secondo problema, per impostazione predefinita PDO non genera un'eccezione quando si verifica un errore. Spetta a te controllarli. Puoi cambiare questo però. http://php.net/manual/en/pdo.error-handling.php

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Quindi, è possibile individuare i problemi da un blocco try/catch attorno al l'esecuzione di query.

+0

Grazie, sì, impostando la gestione degli errori in questo modo i messaggi di errore vengono inseriti nei log - eccellente! –

Problemi correlati