Aktualisieren:
Seit WordPress 4.4. Dies wird nun durch die unterstützte insert
, update
, replace
und delete
Methoden wpdb
und das Ticket # 15158 wurde als geschlossen festgelegt .
Vielen Dank an @dmsnell für die Kommentare zu diesem Update.
Andererseits ist der null
Support in wpdb::prepare()
derzeit als Wontfix geschlossen in Ticket # 12819 .
Vorherige Antwort:
NULL
nicht unterstützt:
Es sieht so aus, als müssten Sie Ihr eigenes benutzerdefiniertes SQL schreiben, um den Wert mit zu aktualisieren NULL
.
Wird NULL
z.Zt. von nicht unterstützt $wpdb->prepare()
, das nimmt die Eingabe über die vsprintf- Formatierungsfunktion erfolgt.
Schauen Sie sich diese offenen Trac-Tickets an:
Diese Tickets sind ungefähr 4 Jahre alt, also würde ich meinen Atem nicht anhalten, bis dies vom Kern unterstützt wird ;-)
Sie sollten einen Blick auf die Quelle werfen, wie von @s_ha_dum vorgeschlagen.
Eine mögliche Problemumgehung:
Wenn Sie abenteuerlustig sind, können Sie mit dem query
Filter Folgendes ausprobieren :
// Add a filter to replace the 'NULL' string with NULL
add_filter( 'query', 'wpse_143405_query' );
global $wpdb;
$wpdb->update(
'table',
array(
'status' => 'NULL',
),
array( 'id' => 1 )
);
// Remove the filter again:
remove_filter( 'query', 'wpse_143405_query' );
wo
/**
* Replace the 'NULL' string with NULL
*
* @param string $query
* @return string $query
*/
function wpse_143405_query( $query )
{
return str_ireplace( "'NULL'", "NULL", $query );
}
Vielleicht möchten Sie eine eindeutigere Zeichenfolge verwenden, als sie 'NULL'
zu ersetzen, vielleicht '###NULL###'
stattdessen.
NULL
wurde in r34737 hinzugefügt , sodass keine Problemumgehung mehr erforderlich istwpdb->update
Der Standardwert ist eine Zeichenfolge für alle Datentypen.Sie können ein Format angeben, die zulässigen Bezeichner sind jedoch:
Sie können die Quelle durchlesen und den Prozess ausarbeiten.
Wenn Sie die
wpdb->prepare
Methode hacken (auf einem Dev-Server, der regelmäßig gelöscht wird :)), um die SQL vor der Rückkehr zu sichern, werden Sie feststellen, dass der Austausch vor demwpdb->prepare
folgenden Zeitpunkt erfolgt :Obwohl es, wie von @birgire vorgeschlagen, durchaus eine Beschränkung sein kann
prepare
, die zu diesem Austausch geführt hat.quelle
Ich möchte weiter erklären, wie dies in WP 4.4 und darüber hinaus gemacht wird. Sie müssen sowohl das Daten- als auch das Formatelement, für das Sie den Wert null festlegen möchten, auf einen PHP-Wert 'null' setzen.
Das Beispiel in Ticket # 15158 lautet wie folgt:
quelle