请注意,我的主要答案在底部(如果您无法编辑此功能),但我已经提供了替代答案,因为 OP 不清楚是否该函数可以/应该被编辑。
编辑此函数
你声明的函数有:
public function __getalldata($tablename,...,$limit = 200 ...){ ... }
variousanswershere 中给出的参考似乎正在调整这个默认值——最简单的解决方案是不编辑 默认值,而是设置一个 特殊情况 并明确检查 $limit 是否完全(且仅)null。
澄清一下:
PHP will use an explicitly set NULL value 覆盖任何默认值(在本例中为 200)。
所以;
// within the function
if($limit !== null) {
//use limit in your PDO
}
这不在$limit == 0 或PHP 常见的其他类型杂耍情况下进行转换
这意味着如果 no $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 Constant PHP_INT_SIZE 或 PHP_INT_MAX,它们将准确返回该值。 Reading this question/answer 会告诉你更多关于这一点的信息,但是这些常量应该是自我解释的,作为最大 int 值。
如果 MySQL LIMIT 超过返回的行数,则无效,因此通过将其设置为最大值,它将始终超过返回的行数和/或结果页面输出可用的行数。
因此:
$var = __getalldata("table",[0=>'columnname'],'id','desc',PHP_INT_MAX,'result');
将返回 PHP 整数限制 [2,147,483,647] 或 [9,223,372,036,854,775,807] 内的每一行,具体取决于您的系统(32 位或 64 位)。
让我们面对现实吧——如果 20 亿还不够,你需要面对你的 SQL 查询有一些严重的问题;-)