2016-04-07 8 views
-2

Ich bin unten in Fehler gelaufen, aber es scheint, dass ich nicht richtige Fehlerprotokolle erhalten kann.Was ist der mögliche Grund eines WordPress-Datenbankfehlers: [Abfrage war leer]?

WordPress database error Query was empty for query made by

Ich hatte diese Codes, die fast wie oben beschrieben den Fehler werfen wird.

$query_select = $wpdb->get_results($wpdb->prepare(
    " % " 
    , 1 
),ARRAY_A); 

Meine Frage ist, was die möglichen Codes sind, die query was empty wie in meinem obigen Code werfen.

+1

Jedes Mal wird ein [ 'mysqli_error'] (http://php.net/manual/en/mysqli.error.php) – rnevius

+3

Diese ist eine schreckliche Frage n das hätte geschlossen werden sollen. Das Hinzufügen eines Kopfgelds zu einer schrecklichen Frage macht es nicht zu einer besseren Frage –

+0

Versuchen Sie, das Plugin vollständig zu löschen und alle Datenbanktabellen wp_support_ * zu entfernen, dann erneut zu installieren und erneut zu aktivieren. –

Antwort

1

Es gibt einige Möglichkeiten, diese Art von Fehler zu bekommen. Die folgende Verwendung kann für Sie nützlich sein oder auch nicht.

die $ Verwendung wpdb Objekt

1. Methode - Deklarieren $ wpdb als globale und verwenden es eine SQL-Abfrage-Anweisung auszuführen, die ein PHP-Objekt

global $wpdb; 
$results = $wpdb->get_results('SELECT * FROM wp_options WHERE option_id = 1', OBJECT); 

zweite Methode liefert - Verwendung der $ GLOBALS superglobal. Erfordert keine globale Schlüsselwort (aber nicht best practice sein)

$results = $GLOBALS['wpdb']->get_results('SELECT * FROM wp_options 
              WHERE option_id = 1', OBJECT); 

Einige Benutzer aufgefordert, diese Art von Fragen in Stapelaustausch Link unten To refer:

Another link to refer

0

Wenn wir execute wp DB-Abfrage ist es Eigenschaften in der letzten Abfrage ändern Ich verstehe Ihre Frage nicht, aber folgen Sie unten Code, wenn dies für Sie hilfreich ist.

global $wpdb; 
    $wpdb->get_results($wpdb->prepare(" % " , 1)); 
    if($wpdb->last_error){ 
    //print_r($wpdb->dbh) 
    $dbh = $wpdb->dbh; 
    echo $dbh->errno; // if no == 1065 then query was empty 
    echo $dbh->error; // Query was empty   
    }  
0

https://codex.wordpress.org/Class_Reference/wpdb siehe die Beispiele. Bereiten Sie eine gültige SQL-Abfrage mit Platzhalter für Variablen müssen Sie in Ihrer Anfrage möchten:

$wpdb->prepare( 
" 
    SELECT sum(meta_value) 
    FROM $wpdb->postmeta //valid sql statements here 
    WHERE meta_key = %s 
", 
$meta_key) 

mittlerweile Ihr Code tut nichts:

$wpdb->prepare(
" % " //no sql statements here 
, 1 ...) 

es, wie Sie zu

select * from someTable where someField % 1 -- (it will return no rows) 
wollte sieht

Also, jede leere Abfrage wird diesen Fehler zurückgeben.

1

Die Methode $wpdb->prepare führt diese Funktionalität für WordPress aus, die sowohl eine sprintf() - ähnliche als auch eine vsprintf() - ähnliche Syntax unterstützt.

Die Formate% s (Zeichenfolge),% d (Ganzzahl) und% f (Gleitkomma) werden unterstützt.

Alle% -Zeichen in SQL-String-Literalen, einschließlich LIKE-Platzhalter, müssen doppelt-% maskiert als %% sein.

Also, wenn wir den Code debuggen wir so:

$sql = $wpdb->prepare(" % ", 1); 
die(var_dump($sql)); 

Das Ergebnis wird: string ' ' (length=1)

OMG ein leerer String! Deshalb sehen wir den query was empty Fehler.

Die prepare-Methode erwartet, dass die Formatzeichenfolge Folgendes enthält: %d, %s oder %f. Also, wenn Sie Ihre SQL-Abfrage sein wollen 1 Sie müssten Sie Code ändern:

$query_select = $wpdb->get_results($wpdb->prepare('%d', 1), ARRAY_A); 

Oder wenn Sie Ihre SQL sein wollen % Sie müssten es die Flucht mit einem anderen % wie folgt aus:

$query_select = $wpdb->get_results($wpdb->prepare('%%', 1), ARRAY_A); 

Sie können mehr über das Verfahren vorbereiten herauszufinden und Platzhalter hier Class Reference/wpdb « WordPress Codex

Verwandte Themen