Olası PDOException Hatalar (MySQL 5)?

2 Cevap php

Yani benim web uygulaması için bir yükleyici kurma ve veritabanı bilgileri için giriş alanları ediyorum. Benim doğrulama sürecinin bir parçası (PHP'nin PDO kütüphanesi kullanarak) veritabanı bağlantısını test içerir. Bağlantı başarısız olursa, ben bu yüzden formda uygun giriş alanını başvuruda vb kötü bir şifre, kötü adres, varolmayan veritabanı adı, ayırt edebilmek istiyorum.

Anone bir PDOException ile döndürülen olası hata kodları / mesajları hatlarıyla referans doğru beni işaret edebilir?

Edit: Bu sadece geçirilerek elde edilebilir bu hata kodları / mesajları muhtemelen veritabanına özgü ve yerel veritabanı kodları / hataları olduğunu bana oluştu. Bu durumda, ben şu anda sadece MySQL 5 veritabanı ile çalışıyorum.

2 Cevap

MySQL dokümantasyon error codes için tam bir referans.

1000 başlayan hata kodları server errors. Bu gibi hatalar şunlardır:

  • Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR) Message: Access denied for user '%s'@'%s' (using password: %s)

  • Error: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR) Message: Unknown database '%s'

2000 yılında başlayan hata kodları client errors. Bu gibi hatalar şunlardır:

  • Hata: 2005 (CR_UNKNOWN_HOST) Mesaj: Unknown MySQL server host '% s' (% d)

  • Hata: 2003 (CR_CONN_HOST_ERROR) Mesaj: '% s' (% d) MySQL sunucusuna bağlanmak olamaz

Ben zaten belgelenmiş çünkü, mümkün olan bütün hataları listelemek için gitmiyorum ve ben işlemek gerekiyor hangilerinin bilmiyorum. Örneğin, hataları 2001 ve 2002 hedef platforma alakasız olabilir ki, UNIX soket bağlantıları özgüdür.

PDO::errorCode() and PDO::errorInfo() instead of simply the PDOException mesaj kullanmayı unutmayın.


Hakkında Yorumlarınız Re getCode() - Hayır, o şekilde destek görünmüyor. Ben, hızlı bir test yaptım var_dump() bir PDOException. Ne yazık ki, onun kod hata kodu ve sqlstate istisna iletiye dahil olsa bile basit bir "0" dır.

Exception::getCode() PHP 5.1.0 sürümünden beri baz Exception class parçasıdır. Bu nesne alanı kullanmak için ilgili PDO sürücüsü uygulama kalmış. En azından MySQL sürücüsü için, onlar görünüşte vermedi.

Ben PDO hakkında emin değilim, ama böyle bir şey döndürür mysql_error() işlevini kullanabilirsiniz:

  • Erişim kullanıcı youruser @ yourserver için reddedildi
  • Veritabanını seçmek için açılamıyor
  • Vb ...

Daha sonra kullanıcı doğrudan bu hataları göstermek, ya da tüm olası hataların bir listesini almak için oynamak, doğrudan hatanın nedenini belirlemek olabilir.