Hri*_*ari 8 php mysql sql mysqli mysql-insert-id
当我运行以下代码时,我收到错误说
致命错误:未捕获的异常'mysqli_sql_exception',消息'查询/预准备语句中没有使用索引'
$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;
Jer*_*yth 19
致命错误不在MySQL中; 丢失的索引通知是一个相对较低的严重性警告.
的致命错误是在你的PHP代码,因为以下三个条件:
mysqli_sql_exception所有错误和警告mysqli_report(MYSQLI_REPORT_ALL);.try{}  具有适当catch(){}块的块中),并且未捕获的异常是致命的.你不能对第一个做太多,如另一个答案所述.因此,您可以通过将mysqli_report(...)设置更改为MYSQLI_REPORT_STRICT或MYSQLI_REPORT_OFF,或者除了之外的其他任何内容来修复它MYSQLI_REPORT_ALL.
(编辑:w3d的评论下面给出了一个很好的解释原因,并建议你可以mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)作为一个很好的选择)
对于最佳实践,并与此相结合,您应该在代码中使用try{}并catch(){}适当地修复它.
小智 6
mysqli_report(MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);
关闭“如果查询中未使用任何索引或不良索引,则报告”,但保持其他报告状态不变。
看看这个bug报告:#35450mysqli扩展报告了太多警告
引用一个注释的几句话:
Mysqli扩展会抛出太多警告.
例如,"SELECT*FROM table"会产生警告:"警告:mysqli :: query():查询/预准备语句中没有使用索引SELECT*FROM table ..."
并引用另一个注释,这看起来很有趣:
使用
mysqli_report()禁用这一点.
不幸的是,Humph 这个功能被弃用了......
| 归档时间: | 
 | 
| 查看次数: | 14265 次 | 
| 最近记录: |