Mysql
 sql >> Database >  >> RDS >> Mysql

La mia dichiarazione PDO non funziona

A volte il tuo codice PDO produce un errore come Call to a member function execute() o simili. O anche senza alcun errore ma la query non funziona lo stesso. Significa che la tua query non è stata eseguita.

Ogni volta che una query non riesce, MySQL visualizza un messaggio di errore che spiega il motivo . Sfortunatamente, per impostazione predefinita tali errori non vengono trasferiti su PHP e tutto ciò che hai è un silenzio o un messaggio di errore criptico menzionato sopra. Quindi è molto importante configurare PHP e PDO per segnalare errori MySQL. E una volta visualizzato il messaggio di errore, sarà un gioco da ragazzi risolvere il problema.

Per ottenere informazioni dettagliate sul problema, inserisci la seguente riga nel codice subito dopo la connessione

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

(dove $dbh è il nome della tua variabile di istanza PDO) o, meglio, aggiungi questo parametro come opzione di connessione . Dopodiché tutti gli errori del database verranno tradotti in eccezioni PDO che, se lasciate sole, agiranno come normali errori PHP.

C'è una possibilità molto piccola che in caso di qualche errore specifico non venga generata un'eccezione. Se la tua query() /prepare() o execute() la chiamata restituisce false ma non ci sono eccezioni, controlla PDO::errorInfo() così,

 trigger_error("PDO errorInfo: ".$dbh->errorInfo());

Dopo aver ricevuto il messaggio di errore, è necessario leggerlo e comprenderlo. Sembra troppo ovvio, ma gli studenti spesso trascurano il significato del messaggio di errore. Eppure la maggior parte delle volte spiega il problema in modo abbastanza semplice:

  • Ad esempio, se dice che una tabella particolare non esiste, devi controllare l'ortografia, gli errori di battitura, le maiuscole e le minuscole. Inoltre devi assicurarti che il tuo script PHP si connetta a un database corretto
  • Oppure, se dice che c'è un errore nella sintassi SQL, devi esaminare il tuo SQL. E il punto problematico è proprio prima la parte della query citata nel messaggio di errore.

Devi anche fidarti il messaggio di errore. Se dice che il numero di token non corrisponde al numero di variabili associate, allora è Così. Lo stesso vale per tabelle o colonne assenti. Data la scelta, se è un tuo errore o se il messaggio di errore è sbagliato, attieniti sempre al primo. Ancora una volta sembra condiscendente, ma centinaia di domande su questo stesso sito dimostrano che questo consiglio è estremamente utile.

Nota che per vedere gli errori PDO, devi essere in grado di vedere gli errori PHP in generale. Per fare ciò, devi configurare PHP in base all'ambiente del sito:

  • su uno sviluppo server è molto comodo avere gli errori direttamente sullo schermo, per i quali la visualizzazione degli errori deve essere attivata:

    error_reporting(E_ALL);
    ini_set('display_errors',1);
    
  • durante un live sito, tutti gli errori devono essere registrati, ma mai mostrati al cliente. Per questo, configura PHP in questo modo:

    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    

Nota che error_reporting dovrebbe essere impostato su E_ALL tutto il tempo.

Tieni inoltre presente che, nonostante l'illusione comune, non è necessario utilizzare try-catch per la segnalazione degli errori . PHP ti segnalerà già errori PDO e in una forma migliore. Un'eccezione non rilevata è molto utile per lo sviluppo, tuttavia se desideri mostrare una pagina di errore personalizzata, non utilizzare ancora try catch per questo, ma imposta semplicemente un gestore degli errori personalizzato . In poche parole, non devi trattare gli errori PDO come qualcosa di speciale, ma considerarli come qualsiasi altro errore nel tuo codice.

PS
A volte non ci sono errori ma nemmeno risultati. Quindi significa che non ci sono dati che corrispondono ai tuoi criteri . Quindi devi ammettere questo fatto, anche se puoi giurare che i dati ei criteri vanno bene. Non sono. Devi controllarli di nuovo. Ho una risposta breve che ti aiuterebbe a individuare il problema di corrispondenza, Avere problemi con le righe corrispondenti nel database utilizzando DOP . Segui semplicemente queste istruzioni e il tutorial collegato passo dopo passo e risolvi il tuo problema o fai una domanda a cui rispondere per Stack Overflow.