SQLite3::enableExceptions

(PHP 5 >= 5.3.0, PHP 7)

SQLite3::enableExceptions 例外のスローを有効にする

説明

SQLite3::enableExceptions ([ bool $enableExceptions = FALSE ] ) : bool

SQLite3 が、エラー時に警告や例外をスローするかどうかを制御します。

パラメータ

enable

TRUE の場合、 SQLite3 のインスタンスと、 SQLite3Stmt および SQLite3Result から派生したインスタンスは、エラー時に例外をスローします

FALSE の場合、 SQLite3 のインスタンスと、 SQLite3Stmt および SQLite3Result から派生したインスタンスは、エラー時に警告を発生させます。

どちらのモードであっても、エラーコードやメッセージがもしあれば、 SQLite3::lastErrorCode()SQLite3::lastErrorMsg() で利用できます。

返り値

古い値を返します。つまり、例外が有効であったなら TRUE そうでなければ FALSE を返します。

例1 SQLite3::enableExceptions() の例

<?php
$sqlite 
= new SQLite3(':memory:');
try {
    
$sqlite->exec('create table foo');
    
$sqlite->enableExceptions(true);
    
$sqlite->exec('create table bar');
} catch (
Exception $e) {
    echo 
'Caught exception: ' $e->getMessage();
}
?>

上の例の出力は、 たとえば以下のようになります。

Warning: SQLite3::exec(): near "foo": syntax error in example.php on line 4
Caught exception: near "bar": syntax error
add a note add a note

User Contributed Notes 1 note

up
2
Yoann
1 year ago
Be sure to note the poorly chosen name and default value.

The following snippet does not throw an exception, despite calling a function with the name "enableExceptions" immediately prior to the bad query.
<?php
$sqlite
= new SQLite3('test.tmp');
$sqlite->enableExceptions();
$sqlite->exec('invalid query');
echo
'code still running since no exception was thrown';
?>

Note that this is still error-prone if the passed value is false. One is likely to read "enableExceptions" and ignore the parameter list since the function name conveys a strong (but incorrect) meaning.
To Top