Когда я запускаю следующий код, я получаю сообщение об ошибке
Неустранимая ошибка: исключить исключение «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;
Взгляните на этот отчет об ошибке: #35450
mysqli extension сообщает слишком много предупреждений
Цитируя несколько предложений примечания:
Расширение Mysqli вызывает слишком много предупреждений.
Например, «SELECT * FROM table» приводит к предупреждению: «Warning: mysqli :: query (): индекс не используется в запросе / подготовленном выражении SELECT * FROM table …»
И, цитируя еще одну заметку, которая кажется интересной:
Используйте
mysqli_report()
чтобы отключить это.
К сожалению, эта функция устарела …
Неустранимая ошибка не в MySQL; недостающее уведомление индекса является предупреждением относительно низкой степени серьезности.
Неустранимая ошибка в вашем PHP-коде из-за следующих трех условий:
mysqli_sql_exception
для всех ошибок и предупреждений из-за вашего mysqli_report(MYSQLI_REPORT_ALL);
линия. try{}
с соответствующим блоком catch(){}
), а неперехваченные исключения являются фатальными. Вы не можете многое сделать о первом, как указано в другом ответе. Таким образом, вы можете исправить это, изменив mysqli_report(...)
на MYSQLI_REPORT_STRICT
или MYSQLI_REPORT_OFF
или на самом деле, кроме MYSQLI_REPORT_ALL
.
(edit: комментарий w3d ниже дает хорошее объяснение, почему, и предлагает вам использовать mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)
в качестве хорошей альтернативы)
Для лучшей практики и в сочетании с этим вы должны исправить это правильно, используя try{}
и catch(){}
соответственно в своем коде.
mysqli_report (MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);
Отключает «Сообщить, если индекс индекса или плохой индекс не использовался в запросе», но сохраняет другие отчеты.
Другой способ исправить это – сделать свой столбец «имя» в MySQL индексом.
ALTER TABLE `calc` ADD INDEX ( `name` ) ;