我将使用REST APi的自定义端点来更新自定义表中的字段。因此,我编写了以下函数:
function update_table_single($request = null){
global $wpdb;
$data_key = trim($request[\'data_key\']);
$data_value = trim($request[\'data_value\']);
$where_key = trim($request[\'where_key\']);
$where_value = trim($request[\'where_value\']);
$table = trim($request[\'table\']);
$data = [ $data_key => $data_value ];
$where = [ $where_key => $where_value ];
$wpdbupdate = $wpdb->update($wpdb->prefix.$table, $data, $where);
// $wpdbupdate = $wpdb->query(
// $wpdb->prepare( "UPDATE $wpdb->prefix.$table SET $data_key = %s WHERE $where_key = %d", $data_value, $where_value )
// );
$wpdb->show_errors = TRUE;
$wpdb->suppress_errors = FALSE;
if($wpdbupdate === 0){
$response[\'error\'] = $wpdb->last_error;
$response[\'query\'] = $wpdb->last_query;
$response[\'status\'] = 200;
}else{
$response[\'error\'] = $wpdb->last_error;
$response[\'query\'] = $wpdb->last_query;
$response[\'status\'] = 400;
}
return new WP_REST_Response($response, 123);
}
但奇怪的是,第一次尝试用新值更新字段always 返回false(status:400
).第二次尝试(只需再次发送POST请求)将按预期更新字段
在这两种情况下,查询完全相同:
"UPDATE izq5I_my_customer SET user_color = \'red\' WHERE user_id = 2169"
我还尝试了
prepare()
函数,但这会给出相同的结果。我还可以试着找出这种奇怪行为的原因吗?