WPDB-从数据库读取值和将值写入数据库

时间:2016-01-08 作者:theHubi

我在中有一个自定义字段usermeta 调用vatnumber.如果字段有值,如何读取用户X的特定值?

以下是我目前掌握的情况:

<tr class="vatnumber">
    <th><?php _e( \'VAT-Number:\', \'wpdb_usermeta\' ); ?></th>
    <td><?php $wpdb->get_results("SELECT userid, vatnumber FROM usermeta"); ?></td>
</tr>
但我还不太了解wpdb。我知道它用于从数据库读写数据,但如果我需要特定用户的值,是否必须将user\\u id分配给变量?

同样,如何确保某个字段写入数据库中的正确位置?

如果您能给我一个示例代码,我将非常高兴。

edit01:

据我所知,我可以将其更改为

<?php $wpdb->get_user_meta($user_id, vatnumber,"); ?>
但确实如此$single = false 是否为所有用户提供一个具有各自用户ID的数组?因为在本例中,user\\u id是一个变量。

很抱歉,我已经有一段时间没有使用WordPress数据库了,但是我如何告诉系统从哪个用户那里获取信息呢?我需要读取当前的用户ID,不是吗?

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

即使有更简单的方法,这仍然是一个有效的问题。

更简单的方法是get_user_meta($user_id,\'vatnumber\',true);

$wpdb->get_user_meta($user_id, vatnumber,\'\'); 顺便说一句

设置$single 标记为true是因为虽然您可以在一个键名中存储多个值,但通常最好避免这种情况,以避免混淆。

由于得到的是单个值,因此数据库查询的正确语法如下所示:

<?php 
global $wpdb; $metakey = "vatnumber";
$dbquery = $wpdb->prepare("SELECT meta_value FROM ".$wpdb->prefix."usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $metakey);
$vatnumber = $wpdb->get_var($dbquery);
?>
(您需要打电话global $wpdb; 每个函数内仅一次。)或者,如果您想同时完成这一切:

<?php 
global $wpdb;
$vatnumber = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM ".$wpdb->prefix."usermeta WHERE user_id = %d AND meta_key = %s", $user_id, "vatnumber") );
?>
注意$wpdb->前缀的使用,通常会输出wp_ 因为标准表名为wp_usermeta 但是前缀是可以更改的,在插件中支持这一点是一种很好的做法(但在您自己的站点上进行自定义编码时可能不需要前缀wp_ 无论如何。)

还要注意$wpdb->prepare的操作,这些天往往需要它来避免MySQL注入尝试。%d替换为$user\\u id的数值。%s替换为$meta\\u key的字符串值。

如果确实要为存储了VAT编号的用户获取所有user\\u id和相应的meta\\u值,则可以使用get\\u results方法获取它们,例如:

<?php 
global $wpdb; $metakey = "vatnumber";
$dbquery = $wpdb->prepare("SELECT user_id,meta_value FROM ".$wpdb->prefix."usermeta WHERE meta_key = %s", $metakey);
$vatdata = $wpdb->get_results($dbquery);
foreach ($vatdata as $data) {
    echo "VAT for User ".$data->user_id.": ".$data->meta_value."<br>";
}
?>
更多示例:https://codex.wordpress.org/Class_Reference/wpdb