Errore di PHP DOP con la gestione degli errori
Manuale PHP DOP di riferimento
- PDO :: ERRMODE_SILENT
Questa è la modalità predefinita. PDO sarà sufficiente impostare il codice di errore, utilizzare la DOP :: errorCode () e il metodo DOP :: errorInfo () per controllare gli oggetti di istruzione e di database. Se l'errore è dovuto viene generato l'oggetto della dichiarazione chiamata, allora si può chiamare che PDOStatement oggetto :: errorCode () o il metodo PDOStatement :: errorInfo (). Se l'errore provocato da una chiamata sul oggetto di database, quindi richiamare questi metodi per l'oggetto di database.
- PDO :: ERRMODE_WARNING
Oltre a impostare il codice di errore Inoltre, PDO emette un messaggio di E_WARNING tradizionale. Se si desidera solo per vedere quali problemi si è verificato senza interrompere il flusso della domanda, in modo da questa impostazione nel periodo di debugging / testing è molto utile.
- PDO :: ERRMODE_EXCEPTION
Oltre a impostare il codice di errore Inoltre, DOP getterà una classe PDOException un'eccezione e impostare le proprietà in modo da riflettere i messaggi dei codici di errore e di errore. Questa impostazione è utile anche durante il debug, perché un punto sbagliato ingrandirà in modo efficace lo script, che può puntare molto rapidamente potenziale prefisso problema (ricordate: se l'eccezione fa sì che lo script di interrompere la transazione viene automaticamente roll).
Un altro modo di eccezione è molto utile, rispetto ai tradizionali avvertenze PHP in stile, si può costruire il proprio gestione degli errori in modo più chiaro, e il valore di ritorno di ogni chiamata del database, codice modello anomalo richiesto rispetto alla modalità silenziosa e controllando in modo esplicito / nidificazione meno.
Creare un'istanza DOP e impostare modalità di errore
<?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: Indipendentemente dal fatto che l'attuale serie DOP :: ATTR_ERRMODE, se la connessione non riesce, PDO :: __ construct () sarà sempre un'eccezione PDOException. eccezione non è fatale.
Creare un'istanza DOP e impostare la modalità errore nel costruttore
<?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"); ?>
È possibile che questo esempio di output volontà:
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