php - fatal error : Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement'

标签 php mysql mysqli mysql-insert-id sql

当我运行以下代码时,出现错误提示

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_STRICTMYSQLI_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/

相关文章:

php - 关于mysql和mysqli的使用

php - 如何轻松修复此错误 fatal error : Call to a member function execute() on boolean in/Applications/XAMPP/xamppfiles/htdocs

php - 从数组php中获取第一个非空值

php - 在标签上搜索时如何获得包含所有标签的文章?

mysql - 用户内容网站在mysql中的密码存储

mysql - 双引号在我的数据库记录中不正确,而不是“

php - 通过 while 循环插入多行

php - 使用 array_fill 创建对象数组时如何使每个对象唯一?

php - 分页在 Yii 框架中不起作用

php - 任何人都知道为什么我总是得到重复的图像