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
Lepaskan: 2025-01-01 12:04:11
asal
816 orang telah melayarinya

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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";
}
Salin selepas log masuk

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);
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan