提问人:Cruzer 提问时间:1/12/2021 最后编辑:RiggsFollyCruzer 更新时间:1/12/2021 访问量:241
MySQLi SELECT 语句需要 LIMIT
MySQLi SELECT statement requires LIMIT
问:
我正在尝试显示数据库表中 6 列的列表。此表恰好有 30,000 多条记录。我过去使用的方法有效,但这次列表以 10,939 条记录结束,除非我在行中添加 LIMIT 子句,否则根本不会显示。
表名是 phpbb_users,我排序的列是 username。目标是显示每个人的列表,显示大约 8 个其他数据字段。 如果我使用此代码:
$sql = "SELECT * FROM phpbb_users ORDER BY username";
$result = $conn->query($sql);
然后跟着通常的 while ($row = $result->fetch_assoc()) 的东西,它显示查询失败且没有显示列表的每一行。
如果我将代码更改为:
$sql = "SELECT * FROM phpbb_users ORDER BY username LIMIT 10000";
此时将显示该列表,但仅显示前 10,000 条记录。
在MySQLi SELECT查询中可以读取的记录数量是否有某种限制?当我运行 PHP 5.6 和 MySQL 时,我没有遇到这个问题,但我刚刚升级到 PHP 7.2 和 MySQLi,新代码的工作方式不同。
答:
我确实检查了 FileZilla 中的error_log。这似乎是一个内存限制。
[2021 年 1 月 12 日 13:14:12 UTC]PHP 致命错误:在第 202 行的 /home/tiffinrv/public_html/staff/member_search.php 中允许的内存大小为 33554432 字节耗尽(尝试分配 39828320 字节)
过去,管理员会显示列表并使用 CTRL-F 查找他们想要的记录。我计划编写一些代码,通过使用 SELECT 和 INNER JOIN 从两个表访问该信息来简化操作,但首先需要了解为什么它不再有效。但接下来,我将不得不弄清楚如何处理内存限制。它在升级之前工作正常,但似乎较新的版本有更多的开销,并且为此留下的内存更少。希望在服务器上有足够的RAM,并且可以更好地配置/分配它。
我注意到日志中的另一组错误。
[2021 年 1 月 12 日 13:14:11 UTC]PHP 警告:在第 54 行的 /home/tiffinrv/public_html/staff/member_search.php 中使用未定义的常量 localhost - 假定为“localhost”(这将在未来版本的 PHP 中抛出错误)
我已为数据库连接中使用的变量分配了值。它和我过去一样工作得很好,但这个错误警告了未来的问题。根据我收集到的信息,我可能需要定义它们,例如 define('USERNAME','myname;');而不仅仅是建立值,例如 $username = 'myname';以防止将来的升级出现问题?
我能够在WHM中提高内存限制,现在我的内存错误消息消失了。但是,如果我在查询中使用 LIMIT 10,000,则列表会显示 10,000 条记录。但是,如果我将限制提高到 20000,或者完全删除 LIMIT,则列表将停止在大约 5,000 条记录,但每次运行它时,实际计数都会有所不同。
评论