Вопрос:

Неустранимая ошибка: необработанное исключение «mysqli_sql_exception» с сообщением «Индекс не используется в запросе / подготовленном операторе»

php mysql mysqli mysql-insert-id sql

14151 просмотра

4 ответа

4619 Репутация автора

Когда я запускаю следующий код, я получаю сообщение об ошибке

Неустранимая ошибка: необработанное исключение «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 Источник Размещён: 07.04.2011 11:03

Ответы (4)


5 плюса

351340 Репутация автора

Решение

Посмотрите на этот отчет об ошибках: #35450расширение mysqli сообщает о слишком большом количестве предупреждений

Цитирую несколько предложений заметки:

Расширение Mysqli выдает слишком много предупреждений.
Например, «SELECT * FROM table» приводит к предупреждению: «Предупреждение: mysqli :: query (): индекс не используется в запросе / подготовленном операторе SELECT * FROM table ...»

И, цитируя еще одну заметку, которая кажется интересной:

Используйте, mysqli_report()чтобы отключить это.

Хм, к сожалению, эта функция устарела ...

Автор: Pascal MARTIN Размещён: 07.04.2011 11:08

19 плюса

20299 Репутация автора

Неустранимая ошибка не в 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(){}соответствующим образом в своем коде.

Автор: Jeremy Smyth Размещён: 23.03.2012 03:37

6 плюса

91 Репутация автора

mysqli_report(MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);

Отключает «Отчет, если в запросе не использовался индекс или неверный индекс», но другие отчеты остаются включенными.

Автор: Fred Lovine Размещён: 20.03.2015 03:48

0 плюса

163 Репутация автора

Еще один способ исправить это - сделать столбец таблицы 'name' в MySQL индексом.

ALTER TABLE `calc` ADD INDEX ( `name` ) ;
Автор: nematoth Размещён: 01.10.2015 05:00
Вопросы из категории :
32x32