Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:未捕获异常“mysqli\u sql\u exception”,消息“查询/准备语句中未使用索引”_Php_Mysql_Mysqli_Mysql Insert Id_Sql - Fatal编程技术网

Php 致命错误:未捕获异常“mysqli\u sql\u exception”,消息“查询/准备语句中未使用索引”

Php 致命错误:未捕获异常“mysqli\u sql\u exception”,消息“查询/准备语句中未使用索引”,php,mysql,mysqli,mysql-insert-id,sql,Php,Mysql,Mysqli,Mysql Insert Id,Sql,当我运行下面的代码时,我得到的错误是 致命错误:未捕获异常 带有消息的“mysqli\u sql\u异常” '查询/准备中未使用索引 声明' 这是一个可扩展的模式- -- -- 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

当我运行下面的代码时,我得到的错误是

致命错误:未捕获异常 带有消息的“mysqli\u sql\u异常” '查询/准备中未使用索引 声明'

这是一个可扩展的模式-

--
-- 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;

请查看此错误报告:

引用注释中的几句话:

Mysqli扩展抛出太多错误 警告。例如,选择* 从表中可以看到一条警告: 警告:mysqli::query:无索引 用于查询/准备语句 从表中选择*

引用另一个有趣的注释:

使用mysqli_报告禁用该功能


致命错误不在MySQL中;缺少索引通知是一个相对较低的严重性警告

由于以下三种情况,PHP代码中存在致命错误:

mysqli报告了很多警告,即使是在相对无害的情况下。 由于mysqli_报告mysqli_报告所有错误和警告,您正在抛出mysqli_sql_异常;线 您的PHP代码没有捕获该异常,即它不在具有适当catch{}块的try{}块中,未捕获的异常是致命的。 正如在另一个答案中提到的,对于第一个问题,你无能为力。因此,您可以通过更改mysqli_报告来修复它。。。设置为MYSQLI_REPORT_STRICT或MYSQLI_REPORT_OFF,或者实际上设置为MYSQLI_REPORT_ALL以外的任何内容

编辑:w3d下面的评论很好地解释了原因,并建议您可以使用mysqli_reportMYSQLI_REPORT_ERROR | mysqli_REPORT_STRICT作为一个好的替代方案

为了获得最佳实践,并与此相结合,您应该通过在代码中适当地使用try{}和catch{}来正确地修复它

mysqli_report(MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);

如果查询中未使用索引或坏索引,但仍打开其他报告,则关闭报告。

另一种修复方法是将MySQL中的表列“name”作为索引

ALTER TABLE `calc` ADD INDEX ( `name` ) ;

六羟甲基三聚氰胺六甲醚。。。我不认为这是不可取的,因为我用得很好。。mysqli_REPORT mysqli_REPORT_ALL;弃用并不意味着不起作用,但不应该再使用,并且可能会在某一天或另一天被删除,但我得到的不是警告,而是致命错误。我想知道致命错误。它不应该被弃用似乎是偶然的:是的,它在PHP7中仍然是一个有效的命令,文档中没有弃用消息:它的严重性通常很低,但不应该被忽略:消息说明mysql服务器必须执行完整的表扫描,即,必须检查每个记录是否属于结果集。对于大数据库,为搜索列添加一个额外的索引可能会有所帮助。具体来说,要删除这些特定警告,您需要从REPORT\u mode属性中删除MYSQLI\u REPORT\u index标志。此标志报告查询中是否未使用索引或坏索引。因此,在执行查询之前,请使用mysqli_REPORT mysqli_REPORT_ERROR | mysqli_REPORT_STRICT而不是mysqli_REPORT mysqli_REPORT_ALL`来执行查询。如果表很小,这是不够的。在这种情况下,MySQL/MariaDB将隐式禁用表中的索引,并将其与mysqli抛出相结合。如果不使用索引,那么当stars align mess:在prod中工作,在staging/dev中不工作时,您就有了一个不错的选择。
ALTER TABLE `calc` ADD INDEX ( `name` ) ;