使用PHP获取Drupal 7中的用户列表

时间:2011-12-10 09:50:33

标签: php drupal drupal-7 drupal-modules

如何使用PHP从Drupal 7数据库中获取用户名?

看到这个: Is it possible to use the Drupal api to get a list of users?

这是针对Drupal 6的,我试过这个,但它说

Call to undefined function db_fetch_object()

这是我的代码:

$result = db_query("SELECT name AS users_name FROM {users}");
while($row = db_fetch_object($result)) {    
        print_r($row);      
}

11 个答案:

答案 0 :(得分:8)

让我们试一试

$query = db_select('users', 'u');
    $query->fields('u', array('name'));
    $result = $query->execute();
    while($record = $result->fetchAssoc()) {
         print_r($record['name']);
    }

答案 1 :(得分:5)

在Drupal 7中,您可以使用entity_load

获取所有用户

要单独获取用户名,请使用以下内容

$users = entity_load('user');
$user_names = array();
foreach ($users as $user_id => $user) {
  $user_names[] = $user->name;
}

答案 2 :(得分:4)

user_load_multiple
modules \ profile \ profile.pages.inc中的示例:

$users = user_load_multiple($uids);

$content = '';
foreach ($users as $account) {
  $profile = _profile_update_user_fields($fields, $account);
  $content .= theme('profile_listing', array('account' => $account, 'fields' => $profile));
}

请注意,在drupal 7中,所有事情都是通过实体发生的。它不是那么快,而是灵活......

答案 3 :(得分:2)

$query = db_select('users', 'u');

$query
  ->condition('u.uid', 0, '<>')
  ->fields('u', array('name'));

$result = $query->execute();

Here是Drupal 7 Database api

的完整文档

答案 4 :(得分:1)

如果您将while语句更改为

,则代码几乎正确无误
while ($result as $row) 

d7

中不再需要db_fetch_object 它会起作用。尽管本文中指定的db_select调用可以正常工作,但它们需要更多开销,除非您尝试生成动态查询,否则应该避免这些调用。另请参阅:http://drupal.org/node/224333以获取有关api如何在d6和d7之间切换的信息。在此页面上搜索db_fetch_object将获得此信息。

答案 5 :(得分:1)

我的示例代码,用于从drupal站点获取用户列表,

$all_users = entity_load('user');
foreach($all_users as $value) {
  $user_list = (array)$value;
  $users[$user_list['uid']] = $user_list['name'];
}

现在您可以从数组变量$ users。

中获得答案

例如,如果要列出除管理员以外的所有用户(默认用户),请使用以下示例:

$all_users = entity_load('user');
foreach($all_users as $value) {
  $user_list = (array)$value;
  if($user_list['uid'] > 1) {
    $users[$user_list['uid']] = $user_list['name'];
  }
}

在上面的两个例子中,每个用户的id被放置为数组索引,每个usder的名称被保存为数组值。

答案 6 :(得分:1)

Drupal 7引入了一个新的Entity概念。 用户现在也包含在实体中。 您可以使用以下函数entity_load()来获取所有实体的详细信息。

要获取数组中的用户名:

$users = entity_load('user');
$usernames = array();
foreach($users as $id => $user){
    $usernames[$user->uid] = $user->name;
}
print_r($usernames);

由于

答案 7 :(得分:0)

更好的方法

function GetAllActiveUsers() {
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', 'user')
        ->propertyCondition('status', 1);
  $results = $query->execute();
  $uids = array_keys($results['user']);
  return $uids;
}

这将返回所有活动用户,并使用函数中的代码将其用作帮助程序

答案 8 :(得分:-1)

试试这个:

$query = db_select('users', 'u')
->fields('u')
->execute();
while($result = $query->fetchAssoc()) {
     print_r($record['name']);
}

答案 9 :(得分:-1)

你也可以试试这个,

$query = db_select('users', 'u');
    $query->fields('u', array('uid, name'));
    $result = $query->execute();
    while($record = $result->fetchAssoc()) {
         $account = user_load($record['uid']);
         if($account->uid){
             print $account->name;
         }
    }

答案 10 :(得分:-1)

fetchAll()的简化示例:

 $users = db_select('users', 'u')
    ->fields('u', array('uid'))
    ->execute()
    ->fetchAll();

 foreach ($users as $user) {
    $full_user = user_load($user->uid);
    //do your stuff here 
 }