0

在WordPress 数组中有一些问题,post_meta它在数据库中发送错误的详细信息,所以我想更改update_post_meta数据库中的结果,现在我使用下面的 post meta:

update_post_meta($post_id, '_wpsc_vendors', array(19,'enabled',true,rate,30 ));

生成这个后元键和值:

key: _wpsc_vendors
value: a:5:{i:0;i:19;i:1;s:7:"enabled";i:2;b:1;i:3;s:4:"rate";i:4;i:30;}

现在我也想在数据库中更改结果值:

a:1:{i:19;a:2:{s:7:"enabled";s:4:"true";s:4:"rate";s:2:"30";}}
4

1 回答 1

3

数据:

array(19,'enabled',true,rate,30 )

当被WordPress序列化为以下内容:

a:5:{i:0;i:19;i:1;s:7:"enabled";i:2;b:1;i:3;s:4:"rate";i:4;i:30;}

意义:

a:5:是一个包含 5 个项目的数组

我:0;我:19;是索引为 0 “i:0”的第一个元素,值为整数 19

i:1;s:7:"启用"; 如果索引为 1 的元素,则为 7 个字符的字符串“启用”

... 等等

您想要的序列化值似乎无效:

a:1:{i:19;a:2:{s:7:"已启用";s:4:"true";s:4:"rate";s:2:"30";}}

也许这会帮助你(用序列化 PHP 函数测试):

$b = array('19'=>array("enabled","true","rate","30"));
echo serialize($b);

// Prints:
a:1:{i:19;a:4:{i:0;s:7:"enabled";i:1;s:4:"true";i:2;s:4:"rate";i:3;s:2:"30";}}

如果要将值直接存储/更新到表中,可以执行以下操作:

global $wpdb;
$sql = "UPDATE $wpdb->postmeta SET meta_value = '$meta_value' WHERE meta_key = '_wpsc_vendors' AND post_id = $post_id";
$wpdb->query($sql);

但我不建议将手动修改的数据存储为序列化,或者直接保存到 postmeta 表而不是使用 update_post_meta 函数。

于 2013-07-01T17:23:36.490 回答