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

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

Patricia Arquette
发布: 2025-01-01 12:04:11
原创
769 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板