简介
执行数据库查询时,可能会遇到错误“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中文网其他相关文章!