Обновить:
Начиная с WordPress 4.4. это теперь поддерживается insert
, update
, replace
и delete
методы wpdb
и билет # 15158 был закрыт , как фиксированный .
Спасибо @dmsnell за комментарии об этом обновлении.
С другой стороны, null
поддержка в wpdb::prepare()
настоящее время закрыта как wontfix в тикете # 12819 .
Предыдущий ответ:
NULL
не поддерживается:
Похоже, вам придется написать свой собственный SQL, чтобы обновить значение NULL
.
В настоящее время NULL
не поддерживается тем $wpdb->prepare()
, что принимает ввод через функцию форматирования vsprintf .
Проверьте эти открытые билеты Trac:
Этим билетам около 4 лет, так что я не задерживаю дыхание, пока это не будет поддержано ядром ;-)
Вы должны взглянуть на источник, как предложено @s_ha_dum.
Возможный обходной путь:
Если вы любите приключения, вы можете попробовать следующее с query
фильтром:
// 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' );
где
/**
* Replace the 'NULL' string with NULL
*
* @param string $query
* @return string $query
*/
function wpse_143405_query( $query )
{
return str_ireplace( "'NULL'", "NULL", $query );
}
Возможно, вы захотите использовать более уникальную строку, чем 'NULL'
заменить, возможно, '###NULL###'
вместо этого.
NULL
была добавлена в r34737 , так что больше нет необходимости вwpdb->update
по умолчанию используется строка для всех типов данных.Вы можете указать формат, но допустимыми спецификаторами являются:
Вы можете прочитать источник и отработать процесс.
Если вы взломаете
wpdb->prepare
метод (на сервере dev, который периодически очищается :)), чтобы выгружать SQL перед передачей, вы увидите, что замена происходит раньшеwpdb->prepare
:Хотя, как подсказывает @birgire, вполне возможно, что это побудит вас к
prepare
замене.источник
Я хотел бы подробнее объяснить, как это сделать в WP 4.4 и более поздних версиях. Вам нужно установить как данные, так и элемент формата, который вы хотите иметь значение null, равным значению PHP 'null'.
Пример в билете № 15158 выглядит следующим образом:
источник