请注意,我的主要答案在底部(如果您无法编辑此功能),但我已经提供了替代答案,因为 OP 不清楚该功能是否可以/应该被编辑。
编辑此功能
您声明的函数具有:
public function __getalldata($tablename,...,$limit = 200 ...){ ... }
此处各种 答案 中给出的参考似乎正在调整此默认值 - 最简单的解决方案是不编辑默认值,而是设置特殊情况 并明确检查是否完全(且仅)。$limitnull
澄清一下:
PHP 将使用显式设置的NULL值而不是任何默认值(在本例中为200)。
所以;
// within the function
if($limit !== null) {
//use limit in your PDO
}
这不会转换 PHP 常见的 if$limit == 0或其他类型杂乱的情况
这意味着如果没有 $limit给出值,200则使用默认值。如果NULL给出了显式值,则将使用该值。
代码
请注意,此代码仅作为示例,可能可以进一步简化以更好地遵循 DRY 模式,但我对 CodeIgniter 的了解还不够,无法在这里和现在这样做。
public function __getalldata($tablename,$tablefield=array(),$orderbyfield = 'id',$ascdesc = 'desc',$limit = 200,$type='result')
{
//Query generation according to above parameters
if($limit !== null){
$data = $this->db
->select($tablefield)
->from($tablename)
->order_by($orderbyfield, $ascdesc)
->limit($limit)
->get();
}
else {
$data = $this->db
->select($tablefield)
->from($tablename)
->order_by($orderbyfield, $ascdesc)
->get();
}
return $data->$type();
}
如果您无法编辑函数
我不清楚您是否可以(或想要)编辑函数本身,如果您使用的是 Codeigniter,因此只需将自动值引用到函数参数以返回每个值行,无论如何(实际上删除限制的情况。
为此,请使用PHP 常量 PHP_INT_SIZE或PHP_INT_MAX将准确返回该值。阅读这个问题/答案会告诉你更多关于这一点的信息,但这些常量应该是不言自明的,作为最大的 int 值。
如果 MySQLLIMIT超过返回的行数,则没有效果,因此通过将其设置为最大值,它将始终超过返回的行数和/或结果页面输出可用的行数。
所以:
$var = __getalldata("table",[0=>'columnname'],'id','desc',PHP_INT_MAX,'result');
将返回 [2,147,483,647] 或 [9,223,372,036,854,775,807] 的 PHP 整数限制内的每一行,具体取决于您的系统(32 位或 64 位)。
让我们面对现实吧——如果 20 亿还不够,你需要面对你的 SQL 查询有一些严重的问题;-)