回显mysql_query的所有结果[重复]
Posted
技术标签:
【中文标题】回显mysql_query的所有结果[重复]【英文标题】:Echo all results from mysql_query [duplicate] 【发布时间】: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 个用户处于活动状态,但这只显示一个名称,如何让它同时显示?
【问题讨论】:
【参考方案1】:从数据库中获取数据时,您可以使用while
循环。
您不应该在新代码中使用 mysql_*
函数 (why?),它们是 deprecated。请改用PDO or MySQLi
【讨论】:
【参考方案2】:你需要迭代mysql_query
的结果,例如。
while ($row = mysql_fetch_assoc($result))
echo $row['user_name'];
因为我看到你想通过用逗号分隔结果来连接结果,你可以直接在MySQL
buy 中使用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
【讨论】:
注意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 现在可以使用,但是在查询需要输入的情况下,您应该使用正确的参数化查询以上是关于回显mysql_query的所有结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章