Schwerwiegender Fehler: Uncaught-Ausnahme 'mysqli_sql_exception' mit der Nachricht 'Kein Index in Abfrage / vorbereiteter Anweisung'

7

Wenn ich den folgenden Code ausführe, erhalte ich die Fehlermeldung

  

Fataler Fehler: Nicht abgefangene Ausnahme   'mysqli_sql_exception' mit Nachricht   'Kein Index in Abfrage verwendet / vorbereitet   Aussage '

%Vor%

Und das ist das fähige Schema -

%Vor%     
Hrishikesh Choudhari 07.04.2011, 11:03
quelle

4 Antworten

6

Sehen Sie sich diesen Fehlerbericht an: #35450 mysqli extension meldet zu viele Warnungen

Zitieren einige Sätze einer Notiz:

  

Mysqli Erweiterung wirft zu viele   Warnungen. Beispiel: "SELECT *   FROM Tabelle "führt zu einer Warnung:   "Warnung: mysqli :: query (): Kein Index   Wird in Abfrage / vorbereiteter Anweisung verwendet   SELECT * FROM Tabelle ... "

Und, eine andere Anmerkung zitierend, die interessant scheint:

  

Verwenden Sie mysqli_report() , um das zu deaktivieren.

Humph, leider, diese Funktion ist veraltet ...

    
Pascal MARTIN 07.04.2011, 11:08
quelle
16

Der schwerwiegende Fehler ist nicht in MySQL; Die fehlende Indexbenachrichtigung ist eine Warnung mit relativ geringem Schweregrad.

Der fatale Fehler ist in Ihrem PHP-Code aufgrund der folgenden drei Bedingungen:

  • mysqli meldet eine Menge von Warnungen, sogar für relativ harmlose Bedingungen.
  • Sie werfen mysqli_sql_exception für alle Fehler und Warnungen wegen Ihrer mysqli_report(MYSQLI_REPORT_ALL); -Zeile.
  • Ihr PHP-Code erfasst diese Ausnahme nicht (d. h. sie befindet sich nicht in einem try{} -Block mit einem entsprechenden catch(){} -Block), und nicht abgefangene Ausnahmen sind fatal.

Sie können nicht viel über die erste tun, wie in der anderen Antwort erwähnt. Sie können das Problem entweder beheben, indem Sie Ihre mysqli_report(...) -Einstellung auf MYSQLI_REPORT_STRICT oder MYSQLI_REPORT_OFF oder tatsächlich auf etwas anderes als MYSQLI_REPORT_ALL setzen.

(Bearbeiten: Der Kommentar von w3d unten gibt eine gute Erklärung dafür und schlägt vor, dass Sie mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) als gute Alternative verwenden könnten)

Für Best Practices und in Kombination damit sollten Sie es ordnungsgemäß beheben, indem Sie in Ihrem Code try{} und catch(){} entsprechend verwenden.

    
Jeremy Smyth 23.03.2012 15:37
quelle
2

mysqli_report (MYSQLI_REPORT_ALL ^ ​​MYSQLI_REPORT_INDEX);

Deaktiviert "Bericht, wenn in einer Abfrage kein Index oder ungültiger Index verwendet wurde", behält jedoch andere Berichte bei.

    
Fred Lovine 20.03.2015 15:48
quelle
0

Eine andere Möglichkeit, das Problem zu beheben, besteht darin, Ihre Tabellenspalte "name" in MySQL zu einem Index zu machen.

%Vor%     
nematoth 01.10.2015 17:00
quelle