try preparadas fatal error ejemplos consultas code catch php error-handling pdo

php - preparadas - ¿Cómo exprimir el mensaje de error de PDO?



php pdo execute (4)

Parece que no puedo obtener ningún mensaje de error de PDO:

#$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); try { $sth = $dbh->prepare(''@$%T$!!!''); print_r($sth); print_r($dbh->errorInfo()); } catch (PDOException $e) { echo $e->getMessage(); }

Está dando solo:

PDOStatement Object ( [queryString] => @$%T$!!! ) Array ( [0] => 00000 [1] => [2] => )

setAttribute no ayuda en nada.

Es PHP 5.3.3 Apache 2.0 Handler
PDO Driver para MySQL habilitado
Client API versión mysqlnd 5.0.7-dev - 091210 - $ Revisión: 300533 $

¿Qué puedo hacer para obtener información de error?


Esto imprimirá el código de error así como su correspondiente mensaje detallado.

Consejo: esto es solo una demostración. Solo use para el propósito de depuración. No habilite para mostrar mensajes de error al público en una versión de lanzamiento.

try{ connection=$this->get_connection();//here i brought my connection string connection->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); /** Do your works here.. //$statement=$connection->prepare($sql); //if you are using errorInfo use after prepare statement before execute.here in this method i am not using it. //print_r($statement->errorInfo()); **/ $statement->execute(); } catch(PDOException $e) { //this will echo error code with detail //example: SQLSTATE[42S22]: Column not found: 1054 Unknown column ''nasme'' in ''field list'' echo $e->getMessage(); } //$statement=null;


Primero debes execute la consulta y luego verificar si hay errores: hazlo así:

$sth->execute();

y luego verifica si hay errores. Entonces obtendrás errores, si los hubiere.


Yo también estaba tratando de obtener la información de errorInfo() en el nivel del manejador de la base de datos, pero terminé obteniendo la información del nivel de declaración con PDOStatement::errorInfo()

Por sitio web PHP:

PDO :: errorInfo () solo recupera información de error para operaciones realizadas directamente en el manejador de la base de datos. Si crea un objeto PDOStatement a través de PDO :: prepare () o PDO :: query () e invoca un error en el descriptor de contexto de la sentencia, PDO :: errorInfo () no reflejará el error desde el descriptor de contexto. Debe llamar a PDOStatement :: errorInfo () para devolver la información de error de una operación realizada en un identificador de sentencia particular.


setAttribute hará que PDO arroje errores o excepciones, la última al ejecutar la consulta.

Para las declaraciones preparadas emuladas, no hay ningún cheque en prepare() :

Las declaraciones preparadas emuladas no se comunican con el servidor de la base de datos, por lo que PDO :: prepare () no verifica la declaración.

Pero habrá uno en execute() cuando la consulta se envíe al servidor.

Sin embargo, el controlador mySQL admite declaraciones preparadas nativas desde mySQL 4.1 de todos modos, por lo que esto no debería aplicarse. Utilizando

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

debe causar una excepción para la consulta que utiliza.