回答:
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に追加されたため、回避策は必要なくなりました