답변:
WordPress 4.4 이후 이것은 현재 지원되고 insert
, update
, replace
및 delete
방법 wpdb
과 표 # 15158는 클로우즈되어 고정 .
해당 업데이트에 대한 의견 을 보내 주신 @dmsnell에게 감사드립니다 .
반면, null
지원 은 티켓 # 12819의 wontfix 로 wpdb::prepare()
현재 닫혀 있습니다.
이전 답변 :
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
리턴하기 직전에 SQL을 덤프하기 위해 메소드 를 해킹하면 (주기적으로 정리 된 dev 서버 :)) 대체가 이전에 발생하는 것을 볼 수 있습니다 wpdb->prepare
.
string(48) "UPDATE `table` SET `status` = %s WHERE `id` = %s"
@birgire가 제안한 것처럼 prepare
교체를 유도하는 데 한계가있을 수 있습니다 .
WP 4.4 이상 에서이 작업을 수행하는 방법을 추가로 설명하고 싶습니다. 널 (null)이 되려는 data 및 format 요소를 모두 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 에 추가 되었으므로 더 이상 해결 방법이 필요 없습니다.