복붙노트

[SQL] 치명적인 오류 : catch되지 않은 예외 메시지 'mysqli_sql_exception' '질의 / 준비된 문에 사용 된 인덱스'

SQL

치명적인 오류 : catch되지 않은 예외 메시지 '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;

해결법

  1. ==============================

    1.# 35450 mysqli 확장 보고서 너무 많은 경고 :이 버그 보고서를 살펴 보자

    # 35450 mysqli 확장 보고서 너무 많은 경고 :이 버그 보고서를 살펴 보자

    메모의 몇 문장을 인용 :

    그리고, 재미있는 것 같다 다른 노트를 인용 :

    Humph, 불행하게도, 그 기능은 사용되지 않습니다 ...

  2. ==============================

    2.치명적인 오류가 MySQL은 아닙니다; 누락 된 인덱스 통지는 상대적으로 낮은 심각도 경고입니다.

    치명적인 오류가 MySQL은 아닙니다; 누락 된 인덱스 통지는 상대적으로 낮은 심각도 경고입니다.

    치명적인 오류가 있기 때문에 다음과 같은 세 가지 조건 중, PHP 코드입니다 :

    다른 답변에서 언급 한대로, 많은 첫 번째 대해 할 수 없습니다. 그래서, 당신은 (...) 당신의 mysqli_report을 변경 MYSQLI_REPORT_STRICT 또는 MYSQLI_REPORT_OFF, 또는 실제로 MYSQLI_REPORT_ALL 이외의 다른 설정 중 하나를 해결할 수 있습니다.

    (편집 : | 좋은 대안으로 MYSQLI_REPORT_STRICT) 아래 W3D의 의견은 좋은 설명하는 이유를 부여하며,이 mysqli_report (MYSQLI_REPORT_ERROR를 사용할 수 있습니다 제안)

    모범 사례를 들어이와 함께, 당신은 제대로 적절하게 코드 내에서 시도 {}와 캐치 () {} 사용하여 문제를 해결해야한다.

  3. ==============================

    3.

    mysqli_report(MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);
    

    끕니다 "인덱스 나쁜 인덱스가 쿼리에서 사용하지 않은 보고서가"또 다른보고를 유지합니다.

  4. ==============================

    4.그것을 해결하는 또 다른 방법은 MySQL의 인덱스에 테이블 열 '이름'을 확인하는 것입니다.

    그것을 해결하는 또 다른 방법은 MySQL의 인덱스에 테이블 열 '이름'을 확인하는 것입니다.

    ALTER TABLE `calc` ADD INDEX ( `name` ) ;
    
  5. from https://stackoverflow.com/questions/5580039/fatal-error-uncaught-exception-mysqli-sql-exception-with-message-no-index-us by cc-by-sa and MIT license