Memperbarui:
Sejak WordPress 4.4. ini sekarang didukung oleh insert
, update
, replace
dan delete
metode wpdb
dan tiket # 15.158 telah ditutup sebagai diperbaiki .
Terima kasih kepada @dmsnell karena berkomentar tentang pembaruan itu.
Di sisi lain, null
dukungan di wpdb::prepare()
saat ini ditutup sebagai wontfix di tiket # 12819 .
Jawaban sebelumnya:
NULL
tidak didukung:
Sepertinya Anda harus menulis SQL sendiri untuk memperbarui nilainya NULL
.
Saat NULL
ini tidak didukung oleh $wpdb->prepare()
, yang mengambil input melalui fungsi format vsprintf .
Lihat tiket Trac terbuka ini:
Tiket ini berusia sekitar 4 tahun, jadi saya tidak akan menahan nafas sampai ini didukung oleh inti ;-)
Anda harus melihat sumbernya seperti yang disarankan @s_ha_dum.
Solusi yang mungkin:
Jika Anda berjiwa petualang, Anda dapat mencoba yang berikut dengan query
filter:
// 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' );
dimana
/**
* Replace the 'NULL' string with NULL
*
* @param string $query
* @return string $query
*/
function wpse_143405_query( $query )
{
return str_ireplace( "'NULL'", "NULL", $query );
}
Anda mungkin ingin menggunakan string yang lebih unik daripada 'NULL'
mengganti, mungkin '###NULL###'
sebagai gantinya.
NULL
telah ditambahkan di r34737 , sehingga tidak ada lagi kebutuhan untuk penyelesaian masalahwpdb->update
default ke string untuk semua tipe data.Anda dapat menentukan format tetapi specifier yang diizinkan adalah:
Anda dapat membaca sumbernya dan mengerjakan prosesnya.
Jika Anda meretas
wpdb->prepare
metode (pada server dev yang dihapus secara berkala :)) untuk membuang SQL sebelum sebelum kembali, Anda akan melihat bahwa penggantian terjadi sebelumwpdb->prepare
:Padahal, seperti yang disarankan oleh @birgire, mungkin itu adalah batas untuk
prepare
yang meminta penggantian itu.sumber
Saya ingin menjelaskan lebih lanjut bagaimana melakukan ini di WP 4.4 dan selanjutnya. Anda perlu mengatur elemen data dan format yang Anda inginkan menjadi nol untuk nilai PHP 'nol'.
Contoh di tiket # 15158 adalah sebagai berikut:
sumber