Mise à jour:
Depuis WordPress 4.4. ceci est maintenant pris en charge par les insert
, update
, replace
et les delete
méthodes de wpdb
et le billet # 15158 a été fermé comme fixe .
Merci à @dmsnell d'avoir commenté cette mise à jour.
D'un autre côté, le null
support dans wpdb::prepare()
est actuellement fermé en tant que wontfix dans le ticket # 12819 .
Réponse précédente:
NULL
non supporté:
Il semble que vous devrez écrire votre propre SQL personnalisé pour mettre à jour la valeur avec NULL
.
Actuellement, NULL
n'est pas pris en charge par $wpdb->prepare()
, qui prend l'entrée via la fonction de formatage vsprintf .
Découvrez ces billets Trac ouverts:
Ces billets ont environ 4 ans, donc je ne retiendrais pas mon souffle tant que cela ne serait pas soutenu par le noyau ;-)
Vous devriez jeter un œil à la source comme l'a suggéré @s_ha_dum.
Une solution possible:
Si vous êtes aventureux, vous pouvez essayer ce qui suit avec le query
filtre:
// 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' );
où
/**
* Replace the 'NULL' string with NULL
*
* @param string $query
* @return string $query
*/
function wpse_143405_query( $query )
{
return str_ireplace( "'NULL'", "NULL", $query );
}
Vous voudrez peut-être utiliser une chaîne plus unique que 'NULL'
remplacer, peut-être à la '###NULL###'
place.
NULL
été ajoutée dans r34737 , il n'est donc plus nécessaire de contourner lewpdb->update
prend par défaut une chaîne pour tous les types de données.Vous pouvez spécifier un format mais les spécificateurs autorisés sont:
Vous pouvez lire la source et déterminer le processus.
Si vous piratez la
wpdb->prepare
méthode (sur un serveur de développement qui est nettoyé périodiquement :)) pour vider le SQL avant juste avant le retour, vous verrez que le remplacement se produit avantwpdb->prepare
:Cependant, comme suggéré par @birgire, cela pourrait bien être une limite à ce
prepare
qui a incité ce remplacement.la source
Je voudrais expliquer plus en détail comment procéder dans WP 4.4 et au-delà. Vous devez définir à la fois les données et l'élément de format que vous souhaitez annuler sur une valeur PHP «nulle».
L'exemple du ticket # 15158 est le suivant:
la source