从序列化数据中检索数组大小

时间:2013-06-16 作者:wp student

我在Wordpress user meta中有一个自定义字段,它将数据存储在序列化数组中。我想检索数组的数量。例如:a:2:{blah blah}

<小时>enter image description here我的桌子的屏幕截图

我尝试了以下代码,但不起作用。它应该打印2

$number = $wpdb->get_var("
    SELECT count(*)
    FROM wp_usermeta
    WHERE meta_key=\'bookmark_posts\' AND meta_value LIKE \'%".get_current_user_id()."%\'
");
if ( $number !== \'\' ) {
    echo \'Total bookmarks (\' . $number . \')\';
}
我有一个错误日志。(john\\u newsite是数据库名称)

WordPress database error Table \'john_newsite.wp_usermeta\' doesn\'t exist for query SELECT count(*) FROM wp_usermeta WHERE meta_key=\'bookmark_posts\'

edit:

我刚刚尝试了以下代码。它可以工作,但会计算所有用户的书签总数。如何限制当前登录用户的结果?

$meta_key=\'bookmark_posts\';
$number = $wpdb->get_var( $wpdb->prepare( 
    "SELECT sum(meta_value) 
    FROM $wpdb->postmeta 
    WHERE meta_key = %s", 
    $meta_key
) );
echo "{$number}";

2 个回复
SO网友:Bainternet

您的查询错误,因为您正在meta_value 列而不是user_id 柱在这种情况下,我认为仅仅为此创建自定义查询没有任何意义,因此下面是如何使用本机函数get_user_meta

$data = get_user_meta( get_current_user_id(), \'bookmark_posts\' );
$number = count($data);
if( $number > 0 ){
    echo \'Total bookmarks (\'.$number.\')\';
}

SO网友:Krzysiek Dróżdż

我想,您的SQL正在选择与您想要的不同的内容。它计算表中的行数,您希望选择一行并返回其值。

您必须(使用SQL)选择您感兴趣的行,如下所示:

"SELECT count(*) FROM wp_usermeta WHERE meta_key=\'bookmark_posts\' AND meta_value=\'". get_current_user_id."\'
然后,您应该反序列化这个数组并检查它的元素数。

另外,我不会在这个查询中使用LIKE。速度较慢。另一个原因是它将返回错误的结果(即,当current\\u user\\u id为1时,您的查询也将返回用户10、11、21等的数据…)

结束

相关推荐

$wpdb->插入数据库错误重复条目错误记录

是否有等同于INSERT IGNORE 在wpdb 班当我获取并插入推特提要时,我存储推特ID的字段被键入UNIQUE, 我知道会发生重复,不需要Wordpress在我的PHP错误日志中通知我。(注意,我会写下我需要的查询$wpdb->prepare 但无论出于何种原因,这都会引发一系列其他错误[我很乐意与大家分享,尽管我认为这些错误与这个问题无关])。