4

我正在尝试创建一个函数来查询数据库并输出数组中的所有结果。由于某种原因,它只显示一个结果。

这是功能

function reguser_list() {
$query = mysql_query("SELECT `user_name` FROM `users` WHERE `active` = 1");
$reguser_names = mysql_fetch_assoc($query);
$list_names = implode(', ', $reguser_names);

echo $reguser_names;
}

数据库中当前有 2 个用户处于活动状态,但这仅显示一个名称,如何让它同时显示?

4

4 回答 4

9

您需要迭代的结果mysql_query,例如。

while ($row = mysql_fetch_assoc($result)) 
{
    echo $row['user_name'];
}

因为我看到您想通过用逗号分隔结果来连接结果,所以您可以直接在MySQL购买中使用GROUP_CONCAT()

SELECT GROUP_CONCAT(user_name) as UserName FROM users WHERE active = 1

PHP,

$query = mysql_query("SELECT GROUP_CONCAT(user_name) as UserName FROM users WHERE active = 1");
$reguser_names = mysql_fetch_assoc($query);
$list_names = $reguser_names['UserName'];

The default limit of GROUP_CONCAT() is 1024.

If you want change the value of the variable the syntax is:

SET [GLOBAL | SESSION] group_concat_max_len = val;
// where val is an unsigned integer

more on this link..

于 2013-03-31T01:29:54.797 回答
1

If you're going to stick with ext/mysql, you need to use a while loop. PDOStatement has a very nice fetchAll method that can essentially be substituted for what you have.

$pdo = new PDO('mysql:host=?', 'user', 'pass');
//If `active` is 1 or 0 only, you don't need the `= 1`
echo implode(', ', $pdo->query("SELECT user_name FROM users WHERE active = 1")
    ->fetchAll());
于 2013-03-31T01:33:02.333 回答
0

从数据库中获取时可以使用while循环。

您不应该mysql_*在新代码中使用函数为什么?),它们已被弃用。改用PDO或 MySQLi

于 2013-03-31T01:29:35.490 回答
0

mysql_* are deprecated

 while ($row = mysql_fetch_assoc($result)) {
          echo $row['user_name'];
    }
于 2013-03-31T01:30:54.480 回答