Неустранимая ошибка: необработанное исключение «mysqli_sql_exception» с сообщением «Индекс не используется в запросе / подготовленном операторе»
14151 просмотра
4 ответа
Когда я запускаю следующий код, я получаю сообщение об ошибке
Неустранимая ошибка: необработанное исключение «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;
Автор: Hrishikesh Choudhari
Источник
Размещён: 13.11.2019 11:35
Ответы (4)
5 плюса
Посмотрите на этот отчет об ошибках: #35450
расширение mysqli сообщает о слишком большом количестве предупреждений
Цитирую несколько предложений заметки:
Расширение Mysqli выдает слишком много предупреждений.
Например, «SELECT * FROM table» приводит к предупреждению: «Предупреждение: mysqli :: query (): индекс не используется в запросе / подготовленном операторе SELECT * FROM table ...»
И, цитируя еще одну заметку, которая кажется интересной:
Используйте,
mysqli_report()
чтобы отключить это.
Хм, к сожалению, эта функция устарела ...
Автор: Pascal MARTIN Размещён: 07.04.2011 11:0819 плюса
Неустранимая ошибка не в MySQL; Уведомление об отсутствующем индексе является предупреждением относительно низкой серьезности.
Фатальная ошибка в коде PHP, из следующих трех условий:
- mysqli сообщает много предупреждений, даже для относительно безвредных условий.
- Вы бросаете
mysqli_sql_exception
за все ошибки и предупреждения из-за вашейmysqli_report(MYSQLI_REPORT_ALL);
линии. - Ваш PHP-код не перехватывает это исключение (т.е. он не находится в
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);
Отключает «Отчет, если в запросе не использовался индекс или неверный индекс», но другие отчеты остаются включенными.
Автор: Fred Lovine Размещён: 20.03.2015 03:480 плюса
Еще один способ исправить это - сделать столбец таблицы 'name' в MySQL индексом.
ALTER TABLE `calc` ADD INDEX ( `name` ) ;
Автор: nematoth
Размещён: 01.10.2015 05:00
Вопросы из категории :
- php Как вы отлаживаете PHP-скрипты?
- php Заставьте XAMPP / Apache обслуживать файл вне htdocs
- php Как включить файлы PHP, которые требуют абсолютного пути?
- php Скрипт входа со скрытыми кнопками
- mysql Двоичные данные в MySQL
- mysql Насколько большой может быть база данных MySQL до того, как производительность начнет снижаться
- mysql Выбрать все столбцы, кроме одного в MySQL?
- mysql MySQL или PDO - каковы плюсы и минусы?
- mysqli использование нулей в подготовленном MySQL
- mysqli Commands out of sync; you can't run this command now
- mysqli Неустранимая ошибка: класс «MySQLi» не найден
- mysql-insert-id Неустранимая ошибка: необработанное исключение «mysqli_sql_exception» с сообщением «Индекс не используется в запросе / подготовленном операторе»
- mysql-insert-id ВСТАВЬТЕ в MYSQL и затем перед закрытием соединения выберите идентификатор вставки, а затем добавьте этот идентификатор в 3 другие таблицы
- mysql-insert-id 2-й запрос не выполняется
- mysql-insert-id Ошибка: INSERT INTO / VALUES ('Array'); Количество столбцов не соответствует значению в строке 1
- sql Проверить наличие изменений в таблице SQL Server?
- sql Обменять уникальные индексированные значения столбцов в базе данных
- sql Как работает индексация базы данных?
- sql Как индексировать столбец базы данных