が有効でない場合、私はPHPのmysqliのが
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once "configuration.php";
header('Content-Type: application/json');
try
{
$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
$mysqli->set_charset("utf8");
} catch (Exception $e) {
echo json_encode(
array(
'msg' => $e->getMessage()
)
);
}
を持っており、mysqli
が有効でない場合、それはエラーをキャッチしない例外をスローしません:それはそのよう
Fatal error: Uncaught Error: Class 'mysqli' not found in C:\test\db_connect.php:8
Stack trace:
#0 C:\test\getContacts.php(2): require_once()
#1 {main} thrown in C:\test\db_connect.php on line 8
は、私が何を行うことができますエラーをキャッチする?
私はこの1つを試してみましたが、それはうまくいきませんでした:停止しません
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once "configuration.php";
header('Content-Type: application/json');
try
{
if(!extension_loaded('mysqli'))
{
throw new Exception('mysqli is not enabled');
}
$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
$mysqli->set_charset("utf8");
} catch (Exception $e) {
echo json_encode(
array(
'msg' => $e->getMessage()
)
);
}
この1つは、スクリプトを実行し続けています。
{"msg":"mysqli is not enabled"}
Notice: Undefined variable: mysqli in C:\test\getContacts.php on line 99
Fatal error: Uncaught Error: Call to a member function query() on null in C:\test\getContacts.php:99 Stack trace: #0 {main} thrown in C:\test\getContacts.php on line 99
明示的に有効にしない限り、mysqliは例外をスローしません。接続が失敗した場合でも1つもスローされません。 **常にmysqliオブジェクトを取得し、明示的に '$ mysqli-> connect_error'をチェックしなければなりません。致命的なエラーは例外ではありません。それらはオブジェクトや例外とは関係のないPHPレベルのエラーです。彼らは最初に "投げられ"ていないので、 "捕らえられ"てはいけません。 –
''これは停止せず、例外を捕まえるのでスクリプト '' thatsを実行し続けます - これは予想される動作です。例外を捕まえた後に実行を停止したい場合は、 'die()'または 'exit'を使用してください。 – Steve
あなたが実行を継続したと思ったエラーメッセージは、同じコードではありません。未定義の変数 '$ mysqli'に対して' E_NOTICE'を発行していますが、そこに変数を作成していて 'query()'呼び出しで致命的なエラーが発生しましたが、 'query()'は呼び出さなかったのです。ここに掲載されていない他のコードは、あなたが投げた例外に続くエラーに責任があります。将来の実行を止めたい場合は、 'catch {}'で明示的に 'exit()'する必要があります。 –