首页 >数据库 >mysql教程 >为什么我在 MySQL 中收到'致命错误:未捕获异常 'mysqli_sql_exception' 并显示消息 '查询/准备语句中未使用索引'”错误?

为什么我在 MySQL 中收到'致命错误:未捕获异常 'mysqli_sql_exception' 并显示消息 '查询/准备语句中未使用索引'”错误?

Patricia Arquette
Patricia Arquette原创
2025-01-01 12:04:11772浏览

Why Am I Getting the

“致命错误:未捕获异常‘mysqli_sql_exception’,消息‘查询/准备语句中未使用索引’”解释

简介

执行数据库查询时,可能会遇到错误“Fatal error:未捕获的异常“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);

实现错误处理

另一种解决方案是使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn