Actualizar:
Desde WordPress 4.4. esto ahora se apoya en los insert
, update
, replace
y delete
métodos de wpdb
y el boleto # 15158 ha sido cerrado como fijo .
Gracias a @dmsnell por comentar sobre esa actualización.
Por otro lado, el null
soporte en wpdb::prepare()
está actualmente cerrado como wontfix en el ticket # 12819 .
Respuesta anterior:
NULL
No soportado:
Parece que tendrá que escribir su propio SQL personalizado para actualizar el valor NULL
.
Actualmente NULL
no es compatible con $wpdb->prepare()
, que toma la entrada a través de la función de formato vsprintf .
Echa un vistazo a estos boletos abiertos de Trac:
Estas entradas tienen aproximadamente 4 años, así que no aguantaría la respiración hasta que el núcleo lo apoye ;-)
Deberías echar un vistazo a la fuente como @s_ha_dum sugirió.
Una posible solución alternativa:
Si eres aventurero, puedes probar lo siguiente con el 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' );
dónde
/**
* Replace the 'NULL' string with NULL
*
* @param string $query
* @return string $query
*/
function wpse_143405_query( $query )
{
return str_ireplace( "'NULL'", "NULL", $query );
}
Es posible que desee utilizar una cadena más única que 'NULL'
para reemplazar, tal '###NULL###'
vez en su lugar.
NULL
se agregó en r34737 , por lo que ya no hay necesidad de una solución alternativawpdb->update
el valor predeterminado es una cadena para todos los tipos de datos.Puede especificar un formato pero los especificadores permitidos son:
Puede leer la fuente y resolver el proceso.
Si piratea el
wpdb->prepare
método (en un servidor de desarrollo que se limpia periódicamente :) para volcar el SQL antes de la devolución, verá que el reemplazo ocurre anteswpdb->prepare
:Sin embargo, como lo sugirió @birgire, puede ser un límite
prepare
que provocó ese reemplazo.fuente
Me gustaría explicar más a fondo cómo hacer esto en WP 4.4 y versiones posteriores. Debe establecer tanto el elemento de datos como el formato que desea que sea nulo en un valor 'nulo' de PHP.
El ejemplo en el boleto # 15158 es el siguiente:
fuente