致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息 'No index used in query/prepared statement'

新手上路,请多包涵

当我运行以下代码时,我收到错误消息

致命错误:未捕获的异常 ‘mysqli_sql_exception’ 带有消息 ‘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;

原文由 Hrishikesh Choudhari 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
3 个回答

看看这个错误报告: #35450 mysqli 扩展报告太多警告

引用几句笔记:

Mysqli 扩展引发太多警告。

例如,“SELECT * FROM table”会导致警告:“Warning: mysqli::query(): No index used in query/prepared statement SELECT * FROM table …”

并且,引用另一个看起来很有趣的注释:

使用 mysqli_report() 禁用它。

原文由 Pascal MARTIN 发布,翻译遵循 CC BY-SA 4.0 许可协议

消息“ 查询/准备语句中未使用索引”不是关于您的代码 PHP,而是关于您的表的设计,只需为您的表 添加一个索引

最好的办法是打开开发中的错误/警告:

 mysqli_report(MYSQLI_REPORT_ALL);

但在生产中关闭:

 mysqli_report(MYSQLI_REPORT_STRICT);

原文由 Yamile 发布,翻译遵循 CC BY-SA 4.0 许可协议

PHP里可以排除MYSQLI_REPORT_INDEX错误即可:

mysqli_report(MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_INDEX);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题