我有一个关于add\\u post\\u meta和update\\u post\\u meta的问题。
使用add\\u post\\u meta时:
add_post_meta($id, \'my_meta_key\', \'my_meta_value_1\');
add_post_meta($id, \'my_meta_key\', \'my_meta_value_2\');
add_post_meta($id, \'my_meta_key\', \'my_meta_value_3\');
它会给我这样的东西:
现在,当我得到这样的数据时:
get_post_meta(42, \'my_meta_key\')
我得到:
array (size=3)
0 => string \'my_meta_value_1\' (length=15)
1 => string \'my_meta_value_2\' (length=15)
2 => string \'my_meta_value_3\' (length=15)
但我可以用另一种方式做到这一点,比如:
update_post_meta(42, \'my_meta_key\', [
\'my_meta_value_1\',
\'my_meta_value_2\',
\'my_meta_value_3\',
]);
然后在数据库中,我有:
现在,当我得到这些数据时:
get_post_meta(42, \'my_meta_key\', true)
我有同样的结果:
array (size=3)
0 => string \'my_meta_value_1\' (length=15)
1 => string \'my_meta_value_2\' (length=15)
2 => string \'my_meta_value_3\' (length=15)
所以我有一个问题,这两种保存数据的方法中有一种比另一种更好吗?
或者这两种方法中的任何一种更适合于数据检索?
最合适的回答,由SO网友:Tom J Nowell 整理而成
这是:
update_post_meta(42, \'my_meta_key\', [
\'my_meta_value_1\',
\'my_meta_value_2\',
\'my_meta_value_3\',
]);
更改单个post meta,但该值是一个数组,不能将数组放入数据库中,它需要该列的字符串。因此WordPress将其序列化为字符串并保存结果。
所以我有一个问题,这两种保存数据的方法中有一种比另一种更好吗?
对序列化数据不好,很难查询(有时不可能),额外开销很小,并且会使您面临对象反序列化攻击。
如果要存储一个包含10个内容的列表,请存储10个meta,而不是使用数组存储1个meta。如果确实必须这样做,请首先将其转换为逗号分隔的列表,或者对其进行JSON编码。