Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement'

前端 未结 4 1318
既然无缘
既然无缘 2020-11-27 08:14

When I run the following code, I get the error saying

Fatal error: Uncaught exception \'mysqli_sql_exception\' with message \'No index used in que

相关标签:
4条回答
  • 2020-11-27 08:17

    Take a look at this bug-report : #35450 mysqli extension reports too many warnings

    Quoting a few sentences of a note :

    Mysqli extension throws too many warnings.
    For example, "SELECT * FROM table" results in a warning: "Warning: mysqli::query(): No index used in query/prepared statement SELECT * FROM table ..."

    And, quoting another note, which seems interesting :

    Use mysqli_report() to disable that.

    0 讨论(0)
  • The fatal error is not in MySQL; the missing index notification is a relatively low-severity warning.

    The fatal error is in your PHP code, because of the following three conditions:

    • mysqli reports a lot of warnings, even for relatively harmless conditions.
    • You're throwing mysqli_sql_exception for all errors and warnings due to your mysqli_report(MYSQLI_REPORT_ALL); line.
    • Your PHP code is not catching that exception (i.e. it's not in a try{} block with an appropriate catch(){} block), and uncaught exceptions are fatal.

    You can't do much about the first one, as mentioned in the other answer. So, you can fix it either by changing your mysqli_report(...) setting to MYSQLI_REPORT_STRICT or MYSQLI_REPORT_OFF, or indeed anything other than MYSQLI_REPORT_ALL.

    (edit: w3d's comment below gives a good explanation why, and suggests you could use mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) as a good alternative)

    For best practices, and in combination with this, you should fix it properly by using try{} and catch(){} appropriately within your code.

    0 讨论(0)
  • 2020-11-27 08:26

    Another way to fix it is to make your table column 'name' in MySQL an index.

    ALTER TABLE `calc` ADD INDEX ( `name` ) ;
    
    0 讨论(0)
  • 2020-11-27 08:29
    mysqli_report(MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);
    

    Turns off "Report if no index or bad index was used in a query" yet keeps other reporting on.

    0 讨论(0)
提交回复
热议问题