回答:
WordPress 4.4以降。これは今ではサポートされているinsert、update、replaceとdeleteの方法wpdbとチケット#15158としてクローズされた固定。
この更新についてコメントしてくれた@dmsnellに感謝します。
一方、null中のサポートはwpdb::prepare()、現在のように閉じている WONTFIXチケットで#12819。
前の答え:
NULL サポートされていません:を使用して値を更新するには、独自のカスタムSQLを記述する必要があるようですNULL。
現在NULL、ではサポートされていません。vsprintf書式設定関数を$wpdb->prepare()介して入力を受け取ります。
これらのオープン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###'ます。
wpdb->update デフォルトは、すべてのデータ型の文字列です。
format
(array | string)(オプション)$ dataの各値にマップされるフォーマットの配列。文字列の場合、その形式は$ dataのすべての値に使用されます。省略した場合、$ dataのすべての値は、で特に指定されていない限り、文字列として扱われますwpdb::$field_types。
形式を指定できますが、指定可能な指定子は次のとおりです。
可能な形式値:文字列としての%s; 整数(整数)としての%dおよび浮動小数点としての%f。(詳細については、以下を参照してください。)省略した場合、$ whereのすべての値は文字列として扱われます。
あなたはできるソースを読んで、プロセスをうまく。
wpdb->prepareメソッドをハックして(定期的に消去されるdevサーバーで:))、戻りの直前にSQLをダンプすると、置換が発生する前に発生することがわかりますwpdb->prepare:
string(48) "UPDATE `table` SET `status` = %s WHERE `id` = %s"
ただし、@ birgireが示唆してprepareいるように、それは置換を促したものの限界かもしれません。
WP 4.4以降でこれを行う方法をさらに説明したいと思います。nullにしたいデータとフォーマット要素の両方をPHPの 'null'値に設定する必要があります。
チケット#15158の例は次のとおりです。
$wpdb->update($ttable,
[
'user_id' => NULL,
'status' => 'available',
'update_time' => $now->format('Y-m-d H:i:s')
], [
'therapist_id' => $therapist_id,
'user_id' => $user_id,
'start_time' => $ub['start_time']
], [
NULL,
'%s',
'%s'
], [
'%d',
'%d',
'%s'
]);
NULLがr34737に追加されたため、回避策は必要なくなりました