Atualizar:
Desde o WordPress 4.4. este é agora suportado pelos insert
, update
, replace
e delete
métodos de wpdb
e o bilhete # 15158 foi fechado como fixo .
Agradecemos a @dmsnell por comentar sobre essa atualização.
Por outro lado, o null
suporte em wpdb::prepare()
está atualmente fechado como wontfix no ticket # 12819 .
Resposta anterior:
NULL
não suportado:
Parece que você precisará escrever seu próprio SQL personalizado para atualizar o valor NULL
.
Atualmente NULL
não é suportado por $wpdb->prepare()
, que recebe a entrada através da função de formatação vsprintf .
Confira estes ingressos Trac abertos:
Esses ingressos têm cerca de 4 anos, então eu não prendi a respiração até que isso seja apoiado pelo núcleo ;-)
Você deve dar uma olhada na fonte, como @s_ha_dum sugeriu.
Uma possível solução alternativa:
Se você é aventureiro, tente o seguinte com o query
filtro:
// 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' );
Onde
/**
* Replace the 'NULL' string with NULL
*
* @param string $query
* @return string $query
*/
function wpse_143405_query( $query )
{
return str_ireplace( "'NULL'", "NULL", $query );
}
Você pode querer usar uma sequência mais exclusiva do 'NULL'
que substituir, talvez em '###NULL###'
vez disso.
NULL
foi adicionado em r34737 , por isso não há mais qualquer necessidade de uma solução alternativawpdb->update
o padrão é uma sequência para todos os tipos de dados.Você pode especificar um formato, mas os especificadores permitidos são:
Você pode ler a fonte e elaborar o processo.
Se você hackear o
wpdb->prepare
método (em um servidor de desenvolvimento que é limpo periodicamente :)) para despejar o SQL antes do retorno, verá que a substituição ocorre anteswpdb->prepare
:Embora, como sugerido por @birgire, possa muito bem ser um limite para o
prepare
que levou à substituição.fonte
Gostaria de explicar melhor como fazer isso no WP 4.4 e além. Você precisa definir os dados e o elemento de formato que deseja que sejam nulos para um valor 'nulo' do PHP.
O exemplo no ticket # 15158 é o seguinte:
fonte