代码之家  ›  专栏  ›  技术社区  ›  TarangP

跳过函数的参数值

  •  2
  • TarangP  · 技术社区  · 7 年前

    假设我有一个函数:

    public function __getalldata($tablename,$tablefield=array(),$orderbyfield = 'id',$ascdesc = 'desc',$limit = 200,$type='result')
    {
        //Query generation according to above parameters
        $data = $this->db
                    ->select($tablefield)
                    ->from($tablename)
                    ->order_by($orderbyfield, $ascdesc)
                    ->limit($limit)
                    ->get();
        return $data->$type();
    }
    

    此功能已用于许多页面。现在,我想跳过这个参数 $limit 从功能。那意味着我不想放弃 美元限额 值,但我需要数据库中的所有数据。

    所以,如果我有像600这样的数据,我不知道我有多少数据,我不会给函数任何参数值(所以默认情况下需要500个数据)。 但这里我需要所有的数据 那么我该如何应对这种情况呢?

    6 回复  |  直到 7 年前
        1
  •  2
  •   Kagiso Marvin Molekwa    7 年前

    从…起 https://www.codeigniter.com/user_guide/database/query_builder.html NULL limit 方法作为第一个参数将导致limit语句 不 github ):

    public function limit($value, $offset = 0)
    {
        is_null($value) OR $this->qb_limit = (int) $value;
        empty($offset) OR $this->qb_offset = (int) $offset;
        return $this;
    }
    

    $limit 参数尝试将其值设置为 无效的

    public function __getalldata($tablename, $tablefield=array(), $orderbyfield = 'id', $ascdesc = 'desc', $limit = NULL, $type='result')
    {
        // Query generation according to above parameters
        $data = $this->db
                    ->select($tablefield)
                    ->from($tablename)
                    ->order_by($orderbyfield, $ascdesc)
                    ->limit($limit)
                    ->get();
        return $data->$type();
    }
    
        2
  •  1
  •   DFriend    7 年前

    我假设 $limit = 200 0

    public function __getalldata($tablename, $tablefield=array(), $orderbyfield = 'id',
                                 $ascdesc = 'desc',$limit = 200,$type='result')
    {
        if($limit > 0)
        {
            $this->db->limit($limit);
        }
    
        $data = $this->db
                    ->select($tablefield)
                    ->from($tablename)
                    ->order_by($orderbyfield, $ascdesc)                
                    ->get();
        return $data->$type();
    }
    
        3
  •  0
  •   divyamohan kashyap    7 年前
    public function __getalldata($tablename,$tablefield=array(),$orderbyfield = 'id',$ascdesc = 'desc',$limit = '',$type='result')
    {
        //Query generation according to above parameters
        if($limit == '') {
        $data = $this->db
                    ->select($tablefield)
                    ->from($tablename)
                    ->order_by($orderbyfield, $ascdesc)
                    ->get();
    } else {
    $data = $this->db
                 ->select($tablefield)
                 ->from($tablename)
                 ->order_by($orderbyfield, $ascdesc)
                 ->limit($limit)
                 ->get();
    }
        return $data->$type();
    }
    

    你试过这个吗?

        4
  •  0
  •   Hardik Solanki    7 年前

    根据 MySQL documentation :

    可以使用bigint最大值 18446744073709551615 从中检索所有数据的步骤 MySQL .

    public function __getalldata($tablename,$tablefield=array(),$orderbyfield = 'id',$ascdesc = 'desc',$limit = 18446744073709551615,$type='result')
    {
        //Query generation according to above parameters
        $data = $this->db
                    ->select($tablefield)
                    ->from($tablename)
                    ->order_by($orderbyfield, $ascdesc)
                    ->limit($limit)
                    ->get();
        return $data->$type();
    }
    
        5
  •  -1
  •   Community Mohan Dere    6 年前

    注:我的主要答案在底部( )但我已经给出了备选答案,因为OP不清楚该函数是否可以/应该编辑。

    您声明的函数具有:

    public function __getalldata($tablename,...,$limit = 200 ...){ ... }
    

    various answers here 违约 特例 并明确检查 $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常见的其他类型的杂耍案例

    这意味着如果 不 美元限额 值的默认值 200 值,则将改为使用该值。


    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值。

    LIMIT 超过返回的行,这没有任何影响,因此通过将其设置为最大值,它将始终超过返回的行和/或结果页面输出可用的行。

     $var = __getalldata("table",[0=>'columnname'],'id','desc',PHP_INT_MAX,'result');
    

    让我们面对现实——如果20亿还不够,您需要面对SQL查询中的一些严重问题 ;-)

        6
  •  -2
  •   Xavier    7 年前

    这很容易使用一个 if 陈述只要检查一下你的身体状况是否属实 limit ,如果没有,决定 else . 像这样:

    public function __getalldata($tablename,$tablefield=array(),$orderbyfield = 'id',$ascdesc = 'desc',$limit = 200,$type='result')
    {
        if () // check $limit condition here
        {
        $data = $this->db
                    ->select($tablefield)
                    ->from($tablename)
                    ->order_by($orderbyfield, $ascdesc)
                    ->limit($limit)
                    ->get();
        return $data->$type();
        }
        else {
        $data = $this->db
                    ->select($tablefield)
                    ->from($tablename)
                    ->order_by($orderbyfield, $ascdesc)
                    ->get();
        return $data->$type();
        }
    }
    

    $limit 变量是,所以只需在 如果

    推荐文章