Warum zeigen $ wpdb-> show_errors () und print_error () eine Ausgabe an, auch wenn die Abfrageausgabe korrekt ist?
1 Antworten
- Stimmen
-
-
2015-02-23
Die Ausgabe,die Sie obengepostet haben,ist daserwartete Verhaltenfür
$wpdb->print_error()
,wenn Folgendes zutrifft -- Siebetreibeneine einzelne Site,keine Multisite
-
$wpdb->suppress_errors
ist auffalse gesetzt
-
$wpdb->show_errors
ist auffalse gesetzt
Nach dem Aussehen Ihres Codeserfüllen Sie alle diese Bedingungen.
Beachten Sie auch,dass
$wpdb->show_errors
standardmäßig auftrue
gesetztist,sodass Sienicht anrufenmüssen,es sei denn,Sie haben sie zuvor deaktiviert$wpdb->show_errors()
.Umetwasnur auszugeben,wennein DB-Fehler vorliegt,können Sieeines dieserbeiden Dingetun -
1 - Geben Sie den Fehler aus undfügen Sieihn dem Protokoll hinzu.
Neben der Ausgabe auf dem Bildschirmprotokolliert die Methode
$wpdb->print_error()
Ihren Fehler. Wenn dies wünschenswertist (empfohlen),können Sie diestun -if($wpdb->last_error !== '') : $wpdb->print_error(); endif;
2 - Geben Sie den Fehler aus,protokollieren Sieihnjedochnicht
Wenn Sienicht daraninteressiert sind,den Fehler zuprotokollieren,können Sie Ihreeigene
my_print_error()
-Funktion hinzufügen und diese anstelle von$wpdb->print_error()
- verwenden.function my_print_error(){ global $wpdb; if($wpdb->last_error !== '') : $str = htmlspecialchars( $wpdb->last_result, ENT_QUOTES ); $query = htmlspecialchars( $wpdb->last_query, ENT_QUOTES ); print "<div id='error'> <p class='wpdberror'><strong>WordPress database error:</strong> [$str]<br /> <code>$query</code></p> </div>"; endif; }
Letzte Änderung: Syntaxfehler
The output that you posted above is expected behaviour for
$wpdb->print_error()
if the following is true -- You are running a single site, not multisite
$wpdb->suppress_errors
is set to false$wpdb->show_errors
is set to false
From the looks of your code, you meet all those conditions.
Note also that, unless you have turned them off previously,
$wpdb->show_errors
is set totrue
by default, so you don't need to call$wpdb->show_errors()
.To output something only when there is a DB error you can do one of these two things -
1 - Output the error and add the error to the log
As well as outputting on the screen, the
$wpdb->print_error()
method will log your error. If this is desirable behaviour (recommended), you can do this -if($wpdb->last_error !== '') : $wpdb->print_error(); endif;
2 - Output the error but do not log it
If you are not interested in logging the error, you can add your own
my_print_error()
funciton and use that instead of$wpdb->print_error()
-function my_print_error(){ global $wpdb; if($wpdb->last_error !== '') : $str = htmlspecialchars( $wpdb->last_result, ENT_QUOTES ); $query = htmlspecialchars( $wpdb->last_query, ENT_QUOTES ); print "<div id='error'> <p class='wpdberror'><strong>WordPress database error:</strong> [$str]<br /> <code>$query</code></p> </div>"; endif; }
Last Edit: Syntax Mistake
-
Die Fehlermeldungbefindet sichin "$ wpdb-> last_error",nichtin "$ wpdb-> last_result".The error message is in `$wpdb->last_error`, not in `$wpdb->last_result`.
-
2
2018-12-12
-
Martin_W
-
-
Um dasfolgende Problem herauszufinden,lesen Sie https://wordpress.stackexchange.com/questions/178995/sanitize-a-working-query-string-by-using-wpdb-prepare-fails-with-mysql-db -er Ichbin aufein ziemlich seltsames Verhaltengestoßen. Auch dassmeine verwendete Abfrage korrekt war und die richtige Ausgabe zeigte.
Trotzdem,solange
eine WP-Datenbankfehlerausgabe ausgegebenshow_errors
undprint_error
aktiv sind,wirdneben:Aber warum? Ich hätteerwartet,dasseine Ausgabenur angezeigt wird,wennetwas wieein Fehler odereine Warnung schiefgeht,aber auf diese Weise wird ständigetwas angezeigt.