【问题标题】:Echo all results from mysql_query [duplicate]回显mysql_query的所有结果[重复]
【发布时间】:2013-03-21 11:06:03
【问题描述】:

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

这里是函数

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 个用户处于活动状态,但这只显示一个名称,如何让它同时显示?

【问题讨论】:

    标签: php mysql sql select


    【解决方案1】:

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

    您不应该在新代码中使用 mysql_* 函数 (why?),它们是 deprecated。请改用PDO or MySQLi

    【讨论】:

      【解决方案2】:

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

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

      因为我看到你想通过用逗号分隔结果来连接结果,你可以直接在MySQLbuy 中使用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'];
      

      GROUP_CONCAT() 的默认限制是1024

      如果你想改变变量的值,语法是:

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

      more on this link..

      【讨论】:

      • 注意GROUP_CONCAT 的默认长度限制相对较低
      • @J W 好吧,我希望它们显示在无序列表中。那么我会使用return '<ul><li>' . implode('<li></li>', $row) . '</li></ul>';之类的东西吗
      【解决方案3】:

      mysql_* 已弃用

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

      【讨论】:

        【解决方案4】:

        如果您要坚持使用ext/mysql,则需要使用while 循环。 PDOStatement 有一个非常好的 fetchAll 方法,基本上可以替代你所拥有的。

        $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());
        

        【讨论】:

        • 我有一个 connect.php 已经将我连接到数据库。我还能用它代替new PDO(creds)吗?
        • @zachstarnes 不,你不能,因为PDO 不会创建“全局”连接(坦率地说,这不是很好的做法)。但是,您可以将 PDO 包装为包含凭据的另一个类,然后创建该类 class DB { public function __construct() { return new PDO(credentials); }} $pdo = new DB;
        • 好的。我有多个使用mysql_query 的函数,所以每次我做一个查询我都必须做你上面做的事情? (只是对pdo->query 进行更改)所以如果我更改用于访问数据库的用户名或密码,我必须全部更改?
        • @zachstarnes 现在可以使用,但是在查询需要输入的情况下,您应该使用正确的参数化查询
        猜你喜欢
        • 2012-08-22
        • 2012-11-04
        • 2020-11-07
        • 1970-01-01
        • 2014-06-29
        • 2016-07-30
        • 2013-01-30
        • 1970-01-01
        • 2023-03-16
        相关资源
        最近更新 更多