Aktualizacja:
Od WordPress 4.4. to jest teraz obsługiwana przez insert
, update
, replace
oraz delete
metod wpdb
i biletu # 15158 został zamknięty jako stałe .
Dzięki @dmsnell za komentowanie tej aktualizacji.
Z drugiej strony null
wsparcie w wpdb::prepare()
jest obecnie zamknięte jako wontfix w bilecie # 12819 .
Poprzednia odpowiedź:
NULL
Nieobsługiwany:
Wygląda na to, że będziesz musiał napisać własny niestandardowy kod SQL, aby zaktualizować wartość NULL
.
Obecnie NULL
nie jest obsługiwany przez $wpdb->prepare()
, który pobiera dane wejściowe za pomocą funkcji formatowania vsprintf .
Sprawdź te otwarte bilety Trac:
Bilety te mają około 4 lat, więc nie wstrzymywałbym oddechu, dopóki nie zostanie to wsparte przez rdzeń ;-)
Powinieneś spojrzeć na źródło, jak sugerował @s_ha_dum.
Możliwe obejście:
Jeśli masz ochotę na przygodę, możesz wypróbować następujące query
filtry:
// 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' );
gdzie
/**
* Replace the 'NULL' string with NULL
*
* @param string $query
* @return string $query
*/
function wpse_143405_query( $query )
{
return str_ireplace( "'NULL'", "NULL", $query );
}
Być 'NULL'
może '###NULL###'
zamiast tego możesz chcieć użyć bardziej unikalnego ciągu niż do zamiany .
NULL
została dodana w r34737 , więc nie ma już potrzeby obejścia tego problemuwpdb->update
domyślnie ciąg znaków dla wszystkich typów danych.Możesz określić format, ale dozwolone specyfikatory to:
Możesz przeczytać źródło i opracować proces.
Jeśli zhakujesz
wpdb->prepare
metodę (na serwerze dewelopera, który jest okresowo czyszczony :)), aby zrzucić SQL przed tuż przed powrotem, zobaczysz, że zamiana nastąpi wcześniejwpdb->prepare
:Chociaż, jak sugeruje @birgire, może to być granica,
prepare
która skłoniła tę wymianę.źródło
Chciałbym wyjaśnić, jak to zrobić w WP 4.4 i późniejszych wersjach. Musisz ustawić zarówno element danych, jak i format, który ma być pusty, na wartość PHP „null”.
Przykład na bilecie nr 15158 jest następujący:
źródło