2015-09-18 18 views
17

Bu benim PHP sql deyimi ve PDO deyimi FALSE dönerse varBenim PDO Bildirimi

$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

__roll sizin own__ Parola karma yok edin. PHP [ 'password_hash() '] (http://php.net/manual/en/function.password-hash.php) ve [' password_verify()'] (http://php.net/manual/ sağlar tr/function.password-veri.php) lütfen bunları kullanın. Ve burada bazı [şifreler hakkında iyi fikirler] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) Eğer 5.5'ten önce bir PHP sürümü kullanıyorsanız [burada bir uyumluluk paketi var] (https : // github.com/ircmaxell/password_compat) – RiggsFolly

cevap

22

damping ederken yanlış döndürüyor, bu sorgu başarısız olduğu anlamına gelir çalışmaz. Hatanın farkında olmak için PDO'yu doğru hata raporlama modunda ayarlamalısınız. Kodunuza bu hat hemen sonra hata mesajı aldıktan sonra

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

bağlamak

koyun, sen okuyup anlamak gerek. Kulağa çok açık geliyor, ancak öğrenciler sıklıkla hata mesajının aşırı yardımseverliğini görmezden geliyorlar. Yine de çoğu zaman problemi oldukça açık bir şekilde açıklıyor. Diyelim ki, belirli bir tablo bulunmadığını söylerseniz, yazım, yazım hatası, mektup durumu, kimlik bilgileri ve benzerlerini kontrol etmeniz gerekir. Veya SQL sözdiziminde bir hata olduğunu söylerse, SQL'inizi de incelemeniz gerekir. bölüm hatası messaage belirtilen sağ sorgu önce Ve sorun noktadır.

Sen de güven hata mesajı var. o jeton sayısını bağlı değişkenlerin sayısını eşleşmiyor diyorsa o zaman yüzden olduğunu. Aynı yok tablolar veya sütunlar için de geçerli. Seçim yaptığınız zaman, kendi hatanız ya da hata mesajınız yanlış olsun, her zaman ilkine sadık kalın. Yine kulağa çok hoş geliyor, ama bu sitedeki yüzlerce soru bu tavsiyeyi son derece faydalı gösteriyor.


PDO hatalarını görebilmek için PHP hatalarını genel olarak görebilmeniz gerektiğini unutmayın. Bunu yapmak için, PHP sitesi ortama bağlıdır yapılandırmak zorunda:

görüntülendiği hataları açık olması ettiğim doğru ekranda hataları olması çok kullanışlı bir gelişme sunucusunda
  • :

    error_reporting(E_ALL); 
    ini_set('display_errors',1); 
    
  • açmış, ancak müşteriye gösterilen asla edilecek bir canlı sitesinde, tüm hataları varken.

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

Not error_reportingE_ALL tüm zamanını ayarlamak gerektiğini: Bunun için PHP bu şekilde yapılandırın.

Ayrıca unutmayın ortak sanrı, no try-catch have to be used for the error reporting rağmen. PHP size PDO hatalarını zaten ve daha iyi bir şekilde rapor edecektir. Bir yakalanmamış istisna geliştirme için çok iyi, ancak özelleştirilmiş bir hata sayfası göstermek istiyorsanız, hala bunun için yakalamayı deneyin, ama sadece set custom error handler. Özetle, PDO hatalarını özel bir şey olarak ele almanız gerekmez, ancak bunları kodunuzdaki diğer herhangi bir hata olarak görürsünüz.

+3

Bu OP'lerin sorusuna nasıl cevap veriyor? – NaijaProgrammer

+1

Teşekkürler. Bir katalog hatası buldum ve şimdi hata ayıklanıyor. – Rifthy

+3

@NaijaProgrammer id, ancak "Ortak Anlayış" tarafından önerilen hata raporlama dayalı cevabı bulmak için ona yol açabilir .. – DTH