【问题标题】:Fatal error: Uncaught mysqli_sql_exception: No index used in query/prepared statement SELECT * FROM Product [duplicate]致命错误:未捕获的 mysqli_sql_exception:查询/准备语句中未使用索引 SELECT * FROM Product [重复]
【发布时间】:2016-07-28 14:53:40
【问题描述】:

我查看了我们关于这个问题的帖子,但是,帖子只是建议使用 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) 而不是 error_reporting(E_ALL)。我进行了这些更改,确实删除了错误消息,但现在我的网页上什么也没有出现,它只是一个空白的白页,尽管上面有一些表格。所以我再次开始使用 error_reporting(E_ALL)

我想知道这个错误是否还有其他原因。这是一个导致此问题的简单选择语句,该 php 文件由 4 个表单组成,并且在其前面有一个 insert on duplicate key 语句。

   $prod_sel = $dbc->query("SELECT * FROM Product");
        $prod_sel->data_seek(0);
        while ($output = $prod_sel->fetch_assoc()) {
            $prod_run .= $output['Product_Name'] . '<br>';
            $_SESSION['Product_Name'] = $output['Product_Name'];
        }
       //session_start does not work here
        print "Restaurant is :" . $_SESSION['Product_Name'];
        $prod_sel->free();
        $prod_sel->close();

【问题讨论】:

  • 谁说你必须改变一个为另一个?有什么理由禁止一个以支持另一个?
  • @YourCommonSense 帖子说 error_reporting(E_ALL) 导致 select 语句出现问题,不需要索引。它接着说 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) 解决了这个问题
  • Error_reporting ABSOLUTELY 与 select 语句无关,并导致 nothing 类似。你应该在你的代码中收回它

标签: php mysql mysqli


【解决方案1】:

您的 Product 表没有索引列,您应该修复它以获得更好的性能
您总是可以通过添加此代码来禁用此 mysqli 错误

mysqli_report(MYSQLI_REPORT_INDEX);

您可以找到here关于启用/禁用内部报告功能的完整列表
我建议你阅读这篇关于PHP & MYSQL Communication的好文章

【讨论】:

  • 这就是为什么我很困惑我的产品表有一个主键、一个索引键和两个唯一键。禁用错误,使我页面上的所有内容都消失。
  • 文章很有用,谢谢
【解决方案2】:

我认为你有 2 个问题。

  1. 你没有任何异常捕捉机制
  2. 您的 Product 表没有任何主列

尝试修复您的 Product 表结构,使某些列自动递增或使某些列主要已经存在

【讨论】:

  • 感谢您的输入,但我的产品表有一个自动递增的主键
  • 这里不需要捕捉机制
  • @YourCommonSense 很奇怪,似乎有些异常需要成为 FATAL ERROR 因为它们没有被捕获,我学到了另一件事:)
猜你喜欢
  • 2014-10-20
  • 2023-01-06
  • 2022-12-21
  • 2021-06-02
  • 2015-10-13
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
相关资源
最近更新 更多