删除后置空格安全吗?

时间:2015-05-06 作者:psorensen

我们有很多流氓自定义字段。我觉得如果我们删除空白值,就可以清除数据库中的重要空间。如果我使用以下内容查询数据库:

select * from wp_postmeta where meta_value = \'\'
我得到871038(!)

我的问题是,删除这些是否安全?这样做是否会产生任何潜在问题?

2 个回复
最合适的回答,由SO网友:fischi 整理而成

删除空的自定义字段应该很好。

主要原因是get_post_meta( $id, \'metakey\', true ) 如果未设置字段,则返回空字符串,因此与设置空记录相同。

get_post_meta( $id, \'metakey\', false ), 如果未设置值,则返回空数组,因此也可以。

您可能面临的唯一问题是一次获取所有元数据(get_post_meta( $id )), 因为在返回此调用时,会设置空值,但如果数据库中没有记录,则不会设置空值。这可能会导致PHP_WARNINGs、 但你应该没事的。

SO网友:NXPE3

正如@fischi所指出的,删除空值应该是安全的,因为get_post_meta() 为不存在的和空的元键返回相同的值,除非您在一次获取所有元数据时以某种方式依赖于所设置的键。

WP 3.1引入了过滤器add_{$meta_type}_metadataupdate_{$meta_type}_metadata 可用于清除空值,甚至防止将其保存在数据库中:https://codex.wordpress.org/Plugin_API/Filter_Reference/update_(meta_type)_metadata

例如,您可以拦截并删除包含“my\\u prefix”的所有键的错误值,如下所示:

add_filter(\'update_post_metadata\', function($check, $object_id, $meta_key, $meta_value, $prev_value) {
    if(strpos($meta_key, \'my_prefix\')) {
        if(empty($meta_value)) {
            delete_post_meta($object_id, $meta_key, $prev_value);
            return true; //stop update
        }
    }
    return null; //do update 
}, 10, 5);
请注意,这不会清理任何现有记录。

结束

相关推荐

为什么自定义MySQL查询不返回结果?语法正确吗?

第一次进行自定义查询。我在寻找一种方法来获取某个分类法的类别列表,以便可以为自动完成函数运行类似的查询。为了得到一些结果,我提出了mysql查询,它在phpMyAdmin中给出了结果SELECT * FROM wp_terms INNER JOIN wp_term_taxonomy ON ( wp_terms.term_id = wp_term_taxonomy.term_id ) WHERE wp_terms.name LIKE \'ca%\' AND count