2015-09-18 16 views
17

Questa è la mia dichiarazione di sql PHP ed è il ritorno falso mentre var scaricomio DOP Dichiarazioni non funziona

$password_md5 = md5($_GET['password']); 
$sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)'); 
$result = $sql->execute(array(
        ':fullname' => $_GET['fullname'], 
        ':email' => $_GET['email'], 
        ':username' => $_GET['username'], 
        ':password' => $password_md5, 
        ':password_plain' => $_GET['password'])); 
+1

Si prega di non __roll il proprio hashing della password. PHP fornisce ['password_hash()'] (http://php.net/manual/en/function.password-hash.php) e ['password_verify()'] (http://php.net/manual/ per favore, us/function.password-verify.php). E qui ci sono alcune [buone idee sulle password] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) Se stai usando una versione di PHP precedente alla 5.5 [c'è un pacchetto di compatibilità disponibile qui] (https : // GitHub.com/ircmaxell/password_compat) – RiggsFolly

risposta

22

If DOP torna FALSE, significa che non è riuscita interrogazione. Devi impostare PDO nella corretta modalità di segnalazione degli errori per essere consapevole dell'errore.

mettere questa riga nel codice subito dopo collegare

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

Dopo aver ottenuto il messaggio di errore, è necessario leggere e comprendere esso. Sembra troppo ovvio, ma gli studenti spesso trascurano l'estrema disponibilità del messaggio di errore. Eppure la maggior parte del tempo spiega il problema in modo piuttosto diretto. Di ', se dice che la tabella in particolare non esiste, devi controllare l'ortografia, gli errori di battitura, le lettere, le credenziali e così via. Oppure, se dice che c'è un errore nella sintassi SQL, allora devi esaminare il tuo SQL. E il punto problematico è giusto prima del la parte della query citata nel messaggio di errore.

È necessario anche fiducia il messaggio di errore. Se dice che il numero di token non corrisponde al numero di variabili vincolate, allora è così. Lo stesso vale per le tabelle o le colonne assenti. Data la scelta, se si tratta di un tuo errore o se il messaggio di errore è sbagliato, attenersi sempre al primo. Ancora una volta sembra condiscendente, ma centinaia di domande su questo stesso sito dimostrano che questo consiglio estremamente utile.


Si noti che per visualizzare gli errori PDO, è necessario essere in grado di vedere gli errori PHP in generale. Per fare ciò, è necessario configurare PHP dipende dall'ambiente sito:

  • su un server di sviluppo è molto comodo avere errori a destra sullo schermo, per il quale gli errori visualizzazione devono essere acceso:

    error_reporting(E_ALL); 
    ini_set('display_errors',1); 
    
  • mentre su un sito vivo, tutti gli errori devono essere registrati , ma mai mostrato al cliente. Per questo, configurare PHP in questo modo:

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

Nota che error_reporting deve essere impostato E_ALL tutto il tempo.

Si noti inoltre che, nonostante l'illusione comune, no try-catch have to be used for the error reporting. PHP segnalerà già gli errori PDO e in un modo migliore. Un'eccezione non rilevata è molto buona per lo sviluppo, ma se vuoi mostrare una pagina di errore personalizzata, non utilizzare ancora try catch per questo, ma solo set custom error handler. In poche parole, non è necessario trattare gli errori PDO come qualcosa di speciale, ma considerarli come qualsiasi altro errore nel codice.

+3

Come risponde la domanda degli OP? – NaijaProgrammer

+1

Grazie. Ho trovato un errore del catalogo e ora il debug. – Rifthy

+3

@NaijaProgrammer id non lo fa, ma potrebbe indurlo a trovare la risposta in base alla segnalazione degli errori suggerita da "Your Common Sense" .. – DTH