ホームページ > データベース > mysql チュートリアル > MySQL で「致命的エラー: キャッチされない例外 'mysqli_sql_Exception' とメッセージ 'クエリ/準備されたステートメントでインデックスが使用されていません'」エラーが発生するのはなぜですか?

MySQL で「致命的エラー: キャッチされない例外 'mysqli_sql_Exception' とメッセージ 'クエリ/準備されたステートメントでインデックスが使用されていません'」エラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2025-01-01 12:04:11
オリジナル
770 人が閲覧しました

Why Am I Getting the

「致命的なエラー: キャッチされない例外 'mysqli_sql_Exception' とメッセージ 'クエリ/準備されたステートメントでインデックスが使用されていません'」の説明

概要

データベース クエリを実行すると、次のような問題が発生する場合があります。エラー「致命的なエラー: キャッチされない例外 'mysqli_sql_Exception' とメッセージ 'クエリ/準備されたステートメントでインデックスが使用されていません'」。この記事は、根本的な原因を解明し、このエラーの解決策を提供することを目的としています。

PHP コード評価

$mysql = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('There was a problem connecting to the database');
if (mysqli_connect_errno()) {
    printf("DB error: %s", mysqli_connect_error());
    exit();
}

$get_emp_list = $mysql->prepare("SELECT id, name FROM calc");
if(!$get_emp_list){
    echo "prepare failed\n";
    echo "error: ", $mysql->error, "\n";
    return;
}
$get_emp_list->execute();
$get_emp_list->bind_result($id, $emp_list);
ログイン後にコピー

エラー分析

エラー メッセージは、クエリまたは準備されたステートメントにインデックスが欠落していることを示します。この場合、MySQL テーブル「calc」には、「id」列と「name」列にインデックスがありません。

解決策

mysqli_report を調整する設定

mysqli_report() 関数を使用して、 MySQL によって報告される警告とエラーの重大度。 mysqli_report(MYSQLI_REPORT_OFF) または mysqli_report(MYSQLI_REPORT_ERROR) を設定すると、警告を無効にしてエラーのみを報告でき、この場合の致命的なエラーを回避できます。

mysqli_report(MYSQLI_REPORT_OFF);
ログイン後にコピー

エラー処理を実装します

もう 1 つの解決策は、次のように実装することです。 try{} ブロックと catch() ブロックを使用したエラー処理。これにより、データベース操作中に発生するエラーや警告をキャッチして処理できます。

try {
    $get_emp_list = $mysql->prepare("SELECT id, name FROM calc");
    if(!$get_emp_list){
        throw new Exception("Prepare failed");
    }
    $get_emp_list->execute();
    $get_emp_list->bind_result($id, $emp_list);
} catch (Exception $e) {
    echo "Error occurred: " . $e->getMessage() . "\n";
}
ログイン後にコピー

テーブルにインデックスを作成

根本的なインデックスの問題に対処するには、次のことを行う必要があります。テーブルにインデックスを作成してクエリのパフォーマンスを最適化します。

CREATE INDEX idx_emp_id ON calc (id);
CREATE INDEX idx_emp_name ON calc (name);
ログイン後にコピー

これらのソリューションを実装することで、 「致命的エラー: キャッチされない例外 'mysqli_sql_Exception' とメッセージ 'クエリ/準備されたステートメントでインデックスが使用されていません'」エラーを解決し、データベース操作のパフォーマンスを向上させます。

以上がMySQL で「致命的エラー: キャッチされない例外 'mysqli_sql_Exception' とメッセージ 'クエリ/準備されたステートメントでインデックスが使用されていません'」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート