Php MySql:使用count选择所有条目

Php MySql:使用count选择所有条目,php,mysql,Php,Mysql,嘿,伙计们,我有一个查询,我想计算它找到的所有条目,并在使用while($row=mysql\u fetch\u assoc($query))时选择all so{它将列出所有条目。我遇到的问题是,虽然所有条目都已成功计数并列出了正确的数字,但在我回显$row['title']时,仅选择并列出了最新的条目。如果我删除,则计数(*)作为总计然后它选择全部,但我想知道是否可以使用count和select*。我想知道是否有人知道我做错了什么 SELECT *, COUNT(*) as total FRO

嘿,伙计们,我有一个查询,我想计算它找到的所有条目,并在使用while($row=mysql\u fetch\u assoc($query))时选择all so{它将列出所有条目。我遇到的问题是,虽然所有条目都已成功计数并列出了正确的数字,但在我回显$row['title']时,仅选择并列出了最新的条目。如果我删除
,则计数(*)作为总计
然后它选择全部,但我想知道是否可以使用count和select*。我想知道是否有人知道我做错了什么

SELECT *, COUNT(*) as total FROM new_messages WHERE username='$session->username

如果仍要获取所有记录,请计算客户端的记录(从MySQL的角度来看,即您的php脚本)。
如果使用非缓冲查询,请先获取所有记录,然后调用计算结果记录的函数/方法(例如mysql_num_rows())。如果使用缓冲查询,则函数/方法调用的顺序无关紧要

p、 s:您只获得“最后一条记录”的值,因为使用像Count()这样的聚合函数而不使用GROUP BY子句会使所有记录成为一个组。请参见
MySQL允许您选择不属于GROUPBY子句的列,但表示:


当使用此功能时,每个组中的所有行都应该对从组中逐部分写入的列具有相同的值。服务器可以从组中自由返回任何值,因此结果是不确定的,除非所有值都相同。为什么每行都需要计数?您只需要获取一次,可以使用
mysql_行数
用于:

$res = mysql_query("SELECT * FROM new_messages WHERE username='$session->username");
$count = mysql_num_rows($res);
或者您可以直接获取计数:

list($count) = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM new_messages WHERE username='$session->username"));

首先,您不应该使用
mysql\u fetch\u assoc()
,因为
mysql\u
函数已经过时了

至少,您应该切换到使用或更通用的函数

如果您使用mysqli,您可以使用来计算结果中的行数,该页面上有一个代码示例显示如何使用它

PDO没有计算结果集中的行数的函数,但是您可以使用它,然后只检查您获取的数组的大小


为了完整起见,如果您坚持使用
mysql\uu
函数(您不应该这样做,因为您冒着安全问题的风险),你可以使用。

这是一个非常有趣的回答。我总是很欣赏那些超越我期望的回答,并教会我更多东西。\n我从来没有听说过pdo或mysqli扩展。为什么它们更好?哪一个更好?pdo或mysqli?你提到了安全性,但我不能只使用mysql\u real\u escape\u字符串吗是提高性能,还是更易于使用?我不知道其中一个特别“更好”,PDO是为处理多个数据库而构建的,而mysqli仅适用于mysql。这意味着学习PDO可能更有用,因为如果您在不同的数据库后端(如postgresql或sqlite)上工作,您将能够使用相同的PDO函数。使用这些函数而不是基本的mysql函数的主要优点是ns是因为它们支持使SQL注入不可能的参数化语句:如果你坚持使用
mysql\u real\u escape\u string
,你应该是安全的,但是如果有人在该函数中发现漏洞,你的所有代码都会突然被利用。这就是为什么
mysql\u real\u escape\u string
甚至存在于首先,因为在
mysql\u escape\u string
中发现了一个漏洞。这对于参数化语句来说不是问题。PDO是否与ORACLE一起工作。我只是好奇,因为如果mysql在某种意义上变得过时,即我的数据量变得太大,我显然必须切换数据库。非常感谢您的回复,请回复ally很感激。你还说参数化了,难道有人就不能使用恶意参数吗。因为这些参数仍然是userinput对吗?或者输入是否在参数方程中进行了检查?这是一个非常好的、信息丰富的回答,如果我可以多次投票,我会的。只有一个问题,你提到了缓冲和非缓冲d查询,区别是什么?缓冲查询在函数/方法返回(例如MySQL_query())之前将所有结果记录从MySQL服务器传输到php进程,而非缓冲查询(例如MySQL_unbuffered_query))的数据只有当你真的拿到一张唱片时才会被转移,非常感谢你的时间。非常感谢。