2009-04-13 15 views
9

Web uygulamam için bir yükleyici kuruyorum ve veritabanı kimlik bilgileri için girdi alanlarım var. Doğrulama sürecimin bir kısmı veritabanı bağlantısını test etmeyi (PHP'nin PDO kütüphanesini kullanarak) içerir. Bağlantı başarısız olursa, hatalı parola, hatalı adres, varolmayan veritabanı adı, vb. Arasında ayrım yapabilmeyi istiyorum, böylece formdaki uygun giriş alanını referans gösterebilirim.Olası PDOException Hataları (MySQL 5)?

Bir kişi bana bir PDOException ile döndürülen olası hata kodlarını/mesajlarını ana hatlarıyla gösteren bir referansa yönlendirebilir mi?

Düzenleme: Bu hata kodları/iletileri muhtemelen veritabanına özgüdür ve yerli veritabanı kodları/hataları basitçe geçirilir elde edilebileceğini aklıma geldi. Bu durumda, şu anda sadece MySQL 5 veritabanları ile çalışıyorum.

cevap

14

MySQL belgeleri, error codes için tam referanstır.

1000'den başlayan hata kodları server errors'dur.

  • Hata: 1045 sqlstate: 28000 (ER_ACCESS_DENIED_ERROR) Mesaj: Erişim (şifre kullanılarak:% s) kullanıcı '% s' @ '% s' için reddedildi

  • Hata Bunlar gibi hataları içeriyor 1049 sqlstate: 42000 (ER_BAD_DB_ERROR) mesaj: 2000 başlayarak Bilinmeyen veritabanı% s

hata kodları client errors bulunmaktadır.

  • Hata:: 2005 (CR_UNKNOWN_HOST) Mesaj: Bilinmeyen MySQL sunucusu ana '% s' (% d)

  • Hata: 2003 (CR_CONN_HOST_ERROR) Mesaj: bağlanamıyor Bunlar gibi hataları içeriyor '% s' (% d)

Ben zaten belgelenen çünkü, tüm olası hataları listelemek için gitmiyorum ve senin işlemek gerekir hangilerinin bilmiyorum MySQL sunucusunun. Örneğin, 2001 ve 2002 hataları, hedef platformunuzla alakasız olabilecek UNIX yuva bağlantılarına özgüdür.

basitçe PDOException mesajın yerine PDO::errorCode() ve PDO::errorInfo() kullanmayı unutmayın. Yorumunuz Re


yaklaşık getCode() - Hayır, öyle bir şekilde destek görünmüyor. Hızlı bir test yaptım, var_dump() a PDOException. Ne yazık ki hata kodu ve SQLSTATE istisna mesajında ​​yer alsa bile kodu basit "0" dır.

Exception::getCode(), PHP sürümü 5.1.0'dan itibaren Exception sınıfının bir parçasıdır. Bu nesne alanını kullanmak için ilgili PDO sürücüsü uygulamasına kalmış. En azından MySQL sürücüsü için, görünüşe göre yapmadılar.

+2

PDOException :: getCode() aynı kodu PDO :: errorCode() ile döndürüyor mu? – Wilco

+0

http://www.php.net/manual/en/class.pdoexception.php#pdoexception.props.code adresine göre 'PDO-> getCode()' yöntemi, SQLSTATE hata kodunu döndürmelidir. –

-7

Ben PDO'yu emin değilim, ama böyle bir şey döndüren mysql_error() işlevini kullanabilirsiniz:

  • Access denied for user youruser@yourserver
  • Unable to select database
  • ...etc

Daha sonra direkt olarak kullanıcıya bu hataları göstermek veya bir listesini almak için etrafında oynayabilir tüm olası hatalardan ve doğrudan hatanın nedenini belirleyin.

İlgili konular