Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

592
Vistas
Por favor, ¿qué significan (PDOException $e) y PDOException($e->getMessage(), (int)$e->getCode()) en términos más simples?

¿Puede explicar qué significan (PDOException $e) y PDOException($e->getMessage(), (int)$e->getCode()) aquí?

 try { $pdo = new PDO($attr, $user, $pass, $opts); } catch (PDOException $e) { throw new PDOException($e->getMessage(), (int)$e->getCode()); }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El mejor lugar para comenzar es la página del manual de PHP sobre Excepciones .

Las excepciones son un mecanismo de manejo de errores obligatorio : en lugar de establecer un indicador que el código posterior debe verificar activamente, lanzar una excepción aborta todo el código en ejecución hasta que alcanza un bloque catch coincidente. Si no se encuentra ningún bloque catch , se cierra todo el script.

los bloques catch coinciden usando la misma lógica que el operador instanceof : usted nombra una clase o interfaz, y la excepción debe ser la misma clase, una subclase o implementar esa interfaz. Luego le da un nombre a la variable, en su ejemplo $e , pero puede ser cualquier nombre que desee, y PHP asigna la excepción a esa variable y ejecuta el contenido del bloque catch .

Crear una excepción es lo mismo que crear cualquier otro objeto: usa el operador new . Una vez creados, pueden tener propiedades y métodos, incluido un conjunto predeterminado que incluye getMessage() y getCode() , que devuelven valores que se pasaron cuando se construyeron originalmente. Su comportamiento especial ocurre cuando usas la palabra clave throw .

Entonces, el código que has mostrado:

  1. Ejecuta algún código que podría generar una excepción ( new PDO(...) )
  2. Captura cualquier excepción que coincida con una instanceof PDOException
  3. Busca el "mensaje" y el "código" en ese objeto de excepción
  4. Crea un nuevo objeto PDOException
  5. Lanza esa nueva excepción

El resultado por sí solo es bastante inútil; en particular, los pasos 4 y 5 se pueden reemplazar por throw $e , que esencialmente significa "He visto esta excepción, pero decidí que sigue siendo un problema; continúe buscando otra coincidencia bloque de catch ". Eso es ocasionalmente útil si desea hacer algo entre los pasos 3 y 4, como iniciar sesión o limpiar.

Como se señaló en otra respuesta , elimina el backtrace, que de lo contrario podría exponer las credenciales. Eso se manejaría mejor configurando zend.exception_ignore_args=true en su configuración de PHP. PHP 8.2 también tendrá una nueva función que oculta automáticamente ciertos parámetros en las trazas inversas .

over 4 years ago · Santiago Trujillo Denunciar

0

Comparemos la salida de este código con y sin try catch

 $pdo = new PDO('foo', 'username', 'password');

nos dará

Error fatal de PHP: PDOException no detectada: PDO::__construct():
El argumento #1 ($dsn) debe ser un nombre de fuente de datos válido en pdo.php:6
Seguimiento de la pila:
#0 C:\SERVIDOR\www\htdocs\pdo.php(6): PDO->__construct('foo', 'nombre de usuario' , 'contraseña' )
#1 {main} lanzado en pdo.php en la línea 6

observe que el nombre de usuario y la contraseña se pueden ver en el mensaje de error

Ahora intenta atrapar y volver a lanzar

 try { $pdo = new PDO('foo', 'username', 'password'); } catch (PDOException $e) { throw new PDOException($e->getMessage(), (int)$e->getCode()); }

la salida será

 PHP Fatal error: Uncaught PDOException: PDO::__construct(): Argument #1 ($dsn) must be a valid data source name in pdo.php:12 Stack trace: #0 {main} thrown in pdo.php on line 12

como puede ver, no hay nombre de usuario ni contraseña.

Esta es la única razón por la que se emplea un código tan torpe

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda