error de PHP PDO con el manejo de errores
- PDO :: ERRMODE_SILENT
Este es el modo por defecto. DOP simplemente establecer el código de error, utilice el método PDO :: errorInfo () PDO :: errorCode () y para comprobar los objetos de los estados y de bases de datos. Si el error es debido a que se genera el objeto de la sentencia de llamada, a continuación, puede llamar a que PDOStatement :: método objeto PDOStatement :: errorInfo () errorCode () o. Si el error se debió a una llamada en el objeto de base de datos, a continuación, invocar esos métodos en el objeto de base de datos.
- PDO :: ERRMODE_WARNING
Además de establecer la adición de código de error, PDO emitirá un mensaje E_WARNING tradicional. Si lo que desea es ver qué problemas se produjo sin interrumpir el flujo de la aplicación, por lo que este escenario en el período de depuración / pruebas es muy útil.
- PDO :: ERRMODE_EXCEPTION
Además de establecer el código de error Además, DOP arrojará una clase PDOException excepción y establecer sus propiedades para reflejar los mensajes de código de error y error. Este ajuste también es útil durante la depuración, ya que un punto equivocado va a ampliar de manera efectiva el guión, que puede señalar a cabo muy rápidamente potencial código de área del problema (recuerda: si la excepción hace que el script para finalizar la transacción es automáticamente rollo).
Otro modo de excepción es muy útil, en comparación con las advertencias de estilo tradicional de PHP, usted puede construir su propia gestión de errores con mayor claridad, y el valor de retorno de cada llamada base de datos, código de patrón anormal necesario en comparación con el modo de silencio y de comprobar de forma explícita / anidación menos.
Crear una instancia PDO y establecer el modo de error
<?php $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
Nota: Independientemente de si el conjunto actual PDO :: ATTR_ERRMODE, si falla la conexión, PDO :: __ construct () siempre producirá una excepción PDOException. Excepción no detectada es fatal.
Crear una instancia PDO y establecer el modo de error en el constructor
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /* 使用 try/catch 围绕构造函数仍然有效,即使设置了 ERRMODE 为 WARNING, 因为如果连接失败,PDO::__construct 将总是抛出一个 PDOException 异常。 */ try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } // 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?>
El anterior ejemplo de salida voluntad:
Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in /tmp/pdo_test.php on line 18 add a note add a note