2010-09-16 16 views
55

Me parece que no puede conseguir cualquier mensaje de error del DOP:Cómo extraer el 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(); 
} 

Se trata de dar únicamente a:

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

setAttribute no ayuda nada.

Es PHP 5.3.3 Apache 2.0 Handler
DOP Driver para MySQL habilitado
cliente de versión de la API mysqlnd 5.0.7-dev - 091.210 - $ Revision: 300533 $

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

+0

¿Qué imprime 'print_r ($ sth-> errorInfo())'? – shamittomar

+0

@shamittomar Lo he intentado también, dando una matriz de 3 elementos vacíos –

Respuesta

2

Es necesario primero execute la consulta y luego comprobar si hay errores: Así que lo haga de esta manera:

$sth->execute(); 

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

+4

¿Y cómo "verifica los errores"? –

+0

que es, después de todo, de lo que se trata la pregunta. ¿Por qué se publicó esto como respuesta y no como comentario? ¿Y por qué recibió tantos votos ascendentes? – Mawg

64

setAttribute se causar DOP a vomitar errores o excepciones - la última cuando se ejecuta la consulta.

para comandos preparados emulados, no hay verificación de prepare():

emulado de comandos preparados no se comunica con el servidor de base de datos para PDO :: prepare() no comprueba el comunicado.

Pero habrá una 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. Usando

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

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

+0

El ejemplo de la página man no ejecuta tampoco: http://ru2.php.net/manual/en/pdo.errorinfo.php y con execute aún no tiene suerte –

+2

@ Col que pasa si configura '$ dbh-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); '? –

+0

@Col Si configura 'ERRMODE_EXCEPTION' y no hay excepciones de' prepare() 'ni' exec() 'entonces algo más está mal, en ese caso, no tengo idea de qué –

4

yo también estaba tratando de obtener la información de errorInfo() a nivel mango de base de datos, pero que terminó siendo la información de nivel de estado con PDOStatement::errorInfo()

por PHP sitio web:

DOP: : errorInfo() solo recupera información de error para las 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 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.

2

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

Asesoramiento: 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; 
+1

http://phpdelusions.net/try-catch –

+0

No entiendo por qué mi respuesta fue editada tan mal n menos votó (-) como sabemos que fue una demostración de cómo hacer algo. es la única forma de lograrlo mientras depura el código. muestra un mensaje de error detallado con el código de error. Ahora no me parece que esta respuesta sea nada:/¿por qué no borrarlo? – aimme

+0

Ah, has restaurado el código original, es suficiente. Si se modifica de una manera que cambie tu intento de nuevo, levanta una bandera de moderador en lugar de entablar una guerra de edición, gracias. Arreglaré las mayúsculas. Aquí tenemos una regla de 'no gritar' :-) ' – halfer

Cuestiones relacionadas