Rumah >pangkalan data >tutorial mysql >Mengapa Saya Mendapat 'Ralat maut: Pengecualian tidak ditangkap 'mysqli_sql_exception' dengan mesej 'Tiada indeks digunakan dalam pertanyaan/pernyataan yang disediakan'' Ralat dalam MySQL?

Mengapa Saya Mendapat 'Ralat maut: Pengecualian tidak ditangkap 'mysqli_sql_exception' dengan mesej 'Tiada indeks digunakan dalam pertanyaan/pernyataan yang disediakan'' Ralat dalam MySQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-01 12:04:11771semak imbas

Why Am I Getting the

"Ralat maut: Pengecualian tidak ditangkap 'mysqli_sql_exception' dengan mesej 'Tiada indeks digunakan dalam pertanyaan/penyataan yang disediakan'" Diterangkan

Pengenalan

Apabila melaksanakan pertanyaan pangkalan data, anda mungkin menghadapi ralat "Fatal ralat: Pengecualian tidak ditangkap 'mysqli_sql_exception' dengan mesej 'Tiada indeks digunakan dalam pertanyaan/penyata yang disediakan'". Artikel ini bertujuan untuk menjelaskan punca asas dan menyediakan penyelesaian untuk ralat ini.

Penilaian Kod 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);

Analisis Ralat

Mesej ralat menunjukkan bahawa indeks tiada dalam pertanyaan atau pernyataan yang disediakan. Dalam kes ini, jadual MySQL "calc" tidak mempunyai indeks pada lajur "id" dan "nama".

Penyelesaian

Laraskan mysqli_report Tetapan

Fungsi mysqli_report() boleh digunakan untuk mengawal keterukan amaran dan ralat yang dilaporkan oleh MySQL. Dengan menetapkan mysqli_report(MYSQLI_REPORT_OFF) atau mysqli_report(MYSQLI_REPORT_ERROR), anda boleh melumpuhkan amaran dan hanya melaporkan ralat, yang akan mengelakkan ralat maut dalam kes ini.

mysqli_report(MYSQLI_REPORT_OFF);

Laksanakan Pengendalian Ralat

Penyelesaian lain ialah melaksanakan pengendalian ralat menggunakan cuba{} dan tangkap() blok. Ini membolehkan anda menangkap dan mengendalikan ralat dan amaran yang berlaku semasa operasi pangkalan data.

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";
}

Buat Indeks pada Jadual

Untuk menangani isu indeks yang mendasari, anda harus cipta indeks pada jadual untuk mengoptimumkan prestasi pertanyaan.

CREATE INDEX idx_emp_id ON calc (id);
CREATE INDEX idx_emp_name ON calc (name);

Dengan melaksanakan penyelesaian ini, anda boleh menyelesaikan ralat "Fatal error: Uncaught exception 'mysqli_sql_exception' dengan mesej 'No index used in query/prepared statement'" dan meningkatkan prestasi operasi pangkalan data anda.

Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Ralat maut: Pengecualian tidak ditangkap 'mysqli_sql_exception' dengan mesej 'Tiada indeks digunakan dalam pertanyaan/pernyataan yang disediakan'' Ralat dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn