¿Cómo eliminar el mensaje de error de PDO? [duplicar]

Resuelto Your Common Sense asked hace 54 años • 0 respuestas

Parece que no recibo 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();
}

Sólo se entrega:

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
versión de API de cliente habilitada mysqlnd 5.0.7-dev - 091210 - $Revisión: 300533 $

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

Your Common Sense avatar Jan 01 '70 08:01 Your Common Sense
Aceptado

setAttribute hará que PDO genere errores o excepciones, la última cuando ejecuta la consulta.

Para declaraciones preparadas emuladas, no hay registro 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 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. Usando

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

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

Pekka avatar Sep 16 '2010 12:09 Pekka

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

Por sitio web PHP:

PDO::errorInfo() solo recupera información de error para operaciones realizadas directamente en el identificador 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 identificador de la declaración, PDO::errorInfo() no reflejará el error del identificador de la declaración. Debe llamar a PDOStatement::errorInfo() para devolver la información de error de una operación realizada en un identificador de declaración particular.

BitsAndBytes avatar Aug 25 '2012 14:08 BitsAndBytes

Esto imprimirá el código de error y su correspondiente mensaje detallado.

Consejo: esto es sólo una demostración. Úselo solo con fines de depuración. No habilite la opción de 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;
aimme avatar Aug 18 '2015 06:08 aimme

Primero debe realizar executela consulta y luego verificar si hay errores: hágalo así:

 $sth->execute();

y luego comprobar si hay errores. Entonces obtendrá errores, si los hay.

shamittomar avatar Sep 16 '2010 12:09 shamittomar