当我运行以下代码时,出现错误提示
Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement'
$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);
这是可行的架构——
--
-- Table structure for table `calc`
--
CREATE TABLE IF NOT EXISTS `calc` (
`id` int(12) NOT NULL,
`yr` year(4) NOT NULL,
`mnth` varchar(12) NOT NULL,
`name` varchar(256) NOT NULL,
`paidleave` int(12) NOT NULL,
`balanceleave` int(12) NOT NULL,
`unpaidleave` int(12) NOT NULL,
`basesalary` int(12) NOT NULL,
`deductions` int(12) NOT NULL,
`tds` int(12) NOT NULL,
`pf` int(12) NOT NULL,
`finalsalary` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
最佳答案
fatal error 不在MySQL中;缺少索引通知是严重性相对较低的警告。
致命 错误出现在您的 PHP 代码中,因为以下三种情况:
- mysqli 报告了很多警告,即使是相对无害的情况也是如此。
- 由于
mysqli_report(MYSQLI_REPORT_ALL);
行,您将针对所有错误和 警告抛出mysqli_sql_exception
。 - 您的 PHP 代码没有捕获该异常(即它不在具有适当的
catch(){}
block 的try{}
block 中),未捕获的异常是致命的。
如另一个答案中所述,您不能对第一个做太多事情。因此,您可以通过将 mysqli_report(...)
设置更改为 MYSQLI_REPORT_STRICT
或 MYSQLI_REPORT_OFF
或除 以外的任何设置来修复它>MYSQLI_REPORT_ALL
。
(编辑:w3d 下面的评论很好地解释了原因,并建议您可以使用 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)
作为一个不错的选择)
为了获得最佳实践,并结合这一点,您应该通过在代码中适本地使用 try{}
和 catch(){}
来正确修复它。
关于php - fatal error : Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5580039/