查询用户DISPLAY_NAME在自定义MySQL查询中失败

时间:2012-07-25 作者:yuli chika

我遇到了一些麻烦。我试图在自定义mysql查询foreach中获取user display\\u name,但失败了。我试过三种方法。new WP_User, get_user_byget_userdata. 但他们只能得到结果$user->display_name 表中ID=1wp_users(管理)。无法获取任何$user->display_name 哪个ID=2(3,4…)在表中wp_users. 我应该怎么做才能解决这个问题?非常感谢。

$results = mysql_query("SELECT * FROM custom_table");// query connect from a custom database, not in database wp.
while($row = mysql_fetch_array($results)) {
global $wpdb;
$user = new WP_User($row[\'user_id\']);
//$user = get_user_by(\'id\',$row[\'user_id\']);                
//$user = get_userdata($row[\'user_id\']);
var_dump($user);
}

edit

这是我的完整代码。相同代码,如果SELECT * FROM test_table where id = 1 我可以获取用户显示名称admin, 但如果我尝试SELECT * FROM test_table where id = 3 我无法获取显示名称,返回值为空(我已检查wp_users 表,ID=3确实有一个成员。)

header("Content-type: text/html; charset=utf-8"); 
$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "root";
$mysql_database = "test_db";
$db = mysql_connect($mysql_hostname, $mysql_user, $mysql_password)
or die(\'Error connection to database server: \' . mysql_error());
mysql_select_db($mysql_database, $db)
or die(\'Error connection to database server: \' . mysql_error());
mysql_query("SET NAMES utf8");
$results = mysql_query("SELECT * FROM test_table where id = 3");
while($row = mysql_fetch_array($results)) {
    //echo $row[\'id\'];  I can get the $row[\'id\'] value.
    $foo_db = new wpdb(\'root\',\'root\',\'wp\',\'localhost\'); 
    $foo_result = $foo_db->get_results("SELECT * FROM `wp_users` WHERE ID = \'".addslashes($row[\'id\'])."\'",OBJECT);
    foreach($foo_result as $user){ 
        var_dump($user);
    }
}
顺便说一句:test\\u表非常简单,只有1个字段,记录用户ID。(ID:1-ID:33)

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

您应该使用wpdb对象的所有优点。

#Create a new WPDB object for your custom DB
$foo_db = new wpdb(\'username\',\'password\',\'database\',\'localhost\');
$query = (\'SELECT * FROM custom_table\');

#Use the get_results method - You can return OBJECT(default), OBJECT_K, ARRAY_A, ARRAY_N
$results = $foo_db->get_results($query, OBJECT);
foreach($results as $row){
    $user = new WP_User($row->user_id);
}
您可以在此处阅读更多内容:http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

请注意,如果要从使用相同凭据的同一服务器中进行选择,请尝试以下操作,以免嵌套另一个相同的连接:

global $wpdb;
$query = \'SELECT * FROM db_name.custom_table\';
$results = $wpdb->get_results($query);
希望这对你有帮助!

SO网友:fischi

像这样尝试:

$results = mysql_query("SELECT * FROM custom_table");// all the stuff you did up until here
global $wpdb;
while($row = mysql_fetch_array($results)) {

    $query = "SELECT display_name FROM wp_users WHERE ID = %d";
    $user_display_name = $wpdb->get_var( $wpdb->prepare( $query, $row[\'user_id\'] ) );
    echo $user_display_name . "<br />";

}
这应该可以做到。

请注意$wpdb对象上使用的prepare函数,以确保查询的安全性。

结束

相关推荐

get_meta_data within a loop

我试图制作一个简单的小部件,它显示一个帖子列表,后面是每个帖子的一些元数据。这是我的代码:$eventdate 包含我需要检索的元数据。query_posts(\'\'); if (have_posts()) : echo \"<ul>\"; while (have_posts()) : the_post(); $eventdate = get_post_meta($post->ID, \'event-date