2010-04-22 4 views
7

Ho una domanda complessa che viene eseguito in questo modo:Esiste un modo per stampare la query effettiva eseguita da mysqli-> execute()?

if ($stmt = $dbi->prepare($pt_query)) { 
     $stmt->bind_param('ssssssssi', $snome,$scognome,$ssocieta,$svia,$slocalita,$sprovincia,$scap,$stelefono,$sfax,$uid); 
     $stmt->execute();   
     echo $dbi->error; 
     $stmt->close(); 

    } else { 
     printf("Error -> %s\n", $dbi->error); 
    } 

Questa cosa sta venendo a mancare senza alcun errore, semplicemente non aggiorna il database. Dato che ci sono un sacco di dati che vengono trattati prima di questa cosa vorrei sapere se c'è un modo per mostrare la query effettiva che mysqli sta eseguendo per capire dove si trova il problema.

Grazie.

+1

non sembra essere possibile. Dupe: http://stackoverflow.com/questions/962986/how-to-echo-a-mysqli-prepared-statement –

risposta

8

Se la tua affermazione non funziona, dovresti controllare $stmt->error (al contrario di $dbi->error). Per quanto riguarda ottenere il testo effettivo della query: non è possibile. Quando si utilizzano istruzioni preparate, la libreria utilizza un protocollo speciale che non genera una stringa di query effettiva per ciascuna chiamata ->execute().

+0

Grazie, non lo sapevo mai. $ stmt-> error mi ha portato nella giusta direzione. – 0plus1

5

È possibile attivare la registrazione sul DB MySQL stesso, vale a dire. aggiungere un log = file di registro riga a my.ini.

Fare riferimento a MySQL documentation per ulteriori informazioni, se necessario.