A documentação do MySQL é a referência completa para códigos de erro .
Os códigos de erro que começam em 1000 são erros de servidor . Estes incluem erros como:
-
Erro:1045 SQLSTATE:28000 (ER_ACCESS_DENIED_ERROR
)Mensagem:Acesso negado para usuário '%s'@'%s' (usando senha:%s)
-
Erro:1049 SQLSTATE:42000 (ER_BAD_DB_ERROR
)Mensagem:Banco de dados desconhecido '%s'
Os códigos de erro que começam em 2000 são erros do cliente . Estes incluem erros como:
-
Erro:2005 (CR_UNKNOWN_HOST
) Mensagem:Host do servidor MySQL desconhecido '%s' (%d)
-
Erro:2003 (CR_CONN_HOST_ERROR
) Mensagem:Não é possível conectar ao servidor MySQL em '%s' (%d)
Não vou listar todos os erros possíveis, porque eles já estão documentados, e não sei com quais você precisa lidar. Por exemplo, os erros 2001 e 2002 são específicos para conexões de soquete UNIX, que podem ser irrelevantes para sua plataforma de destino.
Não se esqueça de usar
PDO::errorCode()
e PDO::errorInfo()
em vez de simplesmente a PDOException
mensagem. Re seu comentário sobre
getCode()
-- Não, não parece ser suportado dessa forma. Fiz um teste rápido, para var_dump()
uma PDOException
. Infelizmente, seu código é simples "0", embora o código de erro e SQLSTATE estejam incluídos na mensagem de exceção. Exception::getCode() faz parte da base
Exception
class, a partir do PHP versão 5.1.0. Cabe à respectiva implementação do driver PDO utilizar este campo de objeto. Pelo menos para o driver MySQL, eles aparentemente não.