php - 未设置 LIMIT 时在 PDO/MySQL 中设置默认 LIMIT

标签 php mysql pdo

我正在尝试找出是否可以在 PHP 中全局设置和取消设置 MySQL 结果的默认限制。

一些可能看起来像的伪代码:

$pdo->prepare('SELECT * FROM example');
$pdo->setAttribute(PDO::DEFAULT_LIMIT, 1000); // max of 1000 rows returned
$pdo->exec();
$pdo->setAttribute(PDO::DEFAULT_LIMIT, 0); // no limit

// OR

$pdo->query('SET LIMIT_FOR_THIS_MYSQL_SESSION = 1000'); // max of 1000 rows returned
$pdo->prepare('SELECT * FROM example');
$pdo->exec();
$pdo->query('SET LIMIT_FOR_THIS_MYSQL_SESSION = 0');  // no limit

我不确定 PDO/MySQL 是否支持这样的东西。如果没有,是否可以模仿这种行为? (最好不要在 PHP 中解析 SQL,但我会尽我所能)

注意:在实际代码中,PDO 有一个用于连接和查询的包装类,因此我可以动态控制查询的每个部分发生的情况,并且可以轻松访问查询字符串和查询变量。


上下文:

我正在开发一个 API,我们正在尝试设置一次可以返回多少结果的限制。由于有数十个端点,因此能够以某种方式全局设置和取消设置查询限制会容易得多。

由于实际代码查询方式的自定义特性,像上面描述的那样的东西可以只在 PDO 包装器(1 个文件)中实现,而不是必须在每个端点(每个端点)中设置逻辑可以由多个文件组成)来动态添加 LIMIT 子句。

最佳答案

您可以使用 MySQL 的 sql_select_limit设置来配置一个选择应该返回多少条记录。它的值可以从配置文件中设置,从 session 中的代码动态设置。它的值被实际 sql 语句中的任何限制子句覆盖:

The maximum number of rows to return from SELECT statements. The default value for a new connection is the maximum number of rows that the server permits per table. Typical default values are (232)−1 or (264)−1. If you have changed the limit, the default value can be restored by assigning a value of DEFAULT.

If a SELECT has a LIMIT clause, the LIMIT takes precedence over the value of sql_select_limit.

关于php - 未设置 LIMIT 时在 PDO/MySQL 中设置默认 LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983816/

相关文章:

php - 困惑于为 cms 创建数据库设计

php - 切换到从 PHP 编辑 Mysql 数据

php - PDO,准备使用

php - Disqus评论分页

php - 管理页面上的用户表,需要很长时间才能加载

未读取 Php 文本框数据

mysql - 仅针对特定其他列值的一列的索引

php - PDO 用户验证

php - PDO MySQL 之类的查询不返回值

php - 每个用户一个数据库(mysql)连接是否足够?