Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Codeigniter中的限制进行选择_Php_Sql_Codeigniter - Fatal编程技术网

Php 使用Codeigniter中的限制进行选择

Php 使用Codeigniter中的限制进行选择,php,sql,codeigniter,Php,Sql,Codeigniter,我在Codeigniter中开发了一个站点,在我的模型中,我有如下功能: function nationList($limit=null, $start=null) { if ($this->session->userdata('language')=="it") $this->db->select('nation.id, nation.name_it as name'); if ($this->session->userdata('l

我在Codeigniter中开发了一个站点,在我的模型中,我有如下功能:

function nationList($limit=null, $start=null) {
    if ($this->session->userdata('language')=="it")
    $this->db->select('nation.id, nation.name_it as name');
    if ($this->session->userdata('language')=="en")
    $this->db->select('nation.id, nation.name_en as name');
    $this->db->from('nation');
    $this->db->order_by("name", "asc");
    $this->db->limit($limit, $start);
    $query = $this->db->get();
    $nation = array();
    foreach ($query->result() as $row)
        array_push($nation, $row);

    return $nation;     
}
$data["nationlist"] = $this->Nation_model->nationList();
如果在我的控制器中,我无限制地调用函数,并且start不会返回如下结果:

function nationList($limit=null, $start=null) {
    if ($this->session->userdata('language')=="it")
    $this->db->select('nation.id, nation.name_it as name');
    if ($this->session->userdata('language')=="en")
    $this->db->select('nation.id, nation.name_en as name');
    $this->db->from('nation');
    $this->db->order_by("name", "asc");
    $this->db->limit($limit, $start);
    $query = $this->db->get();
    $nation = array();
    foreach ($query->result() as $row)
        array_push($nation, $row);

    return $nation;     
}
$data["nationlist"] = $this->Nation_model->nationList();
相反,如果我设置限制并开始工作! 若limit和start为空,为什么不返回结果?如果limit和start为null,我不想创建第二个函数或控件。 如果limit和start为null,而没有控件或第二个函数使代码更有用、更高效,我如何解决这个问题

试试这个

function nationList($limit=null, $start=null) {
    if ($this->session->userdata('language') == "it") {
        $this->db->select('nation.id, nation.name_it as name');
    }

    if ($this->session->userdata('language') == "en") {
        $this->db->select('nation.id, nation.name_en as name');
    }

    $this->db->from('nation');
    $this->db->order_by("name", "asc");

    if ($limit != '' && $start != '') {
       $this->db->limit($limit, $start);
    }
    $query  = $this->db->get();

    $nation = array();
    foreach ($query->result() as $row) {
        array_push($nation, $row);
    }

    return $nation;     
}
其他访客请注意:

// Executes: SELECT * FROM mytable LIMIT 10 OFFSET 20
// get([$table = ''[, $limit = NULL[, $offset = NULL]]])
$query = $this->db->get('mytable', 10, 20);

// get_where sample, 
$query = $this->db->get_where('mytable', array('id' => $id), 10, 20);

// Produces: LIMIT 10
$this->db->limit(10);  

// Produces: LIMIT 10 OFFSET 20
// limit($value[, $offset = 0])
$this->db->limit(10, 20);

我不知道您在2013年使用的是什么版本的CI,但我使用的是CI3,我只是使用传递给
limit()
的两个
null
参数进行了测试,在呈现的查询中没有
limit
OFFSET
(我使用
get\u compiled\u select()
进行了检查)

这意味着——假设您已经正确地发布了您的编码尝试——您不需要更改任何内容(或者至少旧问题不再是CI问题)

如果这是我的项目,这就是我将如何编写方法,以便在结果集中没有符合条件的行时返回对象的索引数组或空数组

function nationList($limit = null, $start = null) {
    // assuming the language value is sanitized/validated/whitelisted
    return $this->db
        ->select('nation.id, nation.name_' . $this->session->userdata('language') . ' AS name')
        ->from('nation')
        ->order_by("name")
        ->limit($limit, $start)
        ->get()
        ->result();
}
这些改进消除了不必要的语法、条件和冗余循环

以下是CI核心代码供参考:

/**
 * LIMIT
 *
 * @param   int $value  LIMIT value
 * @param   int $offset OFFSET value
 * @return  CI_DB_query_builder
 */
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;
}

因此,
$this->qb_limit
$this->qb_offset
类对象不会更新,因为
null
在馈送到
时计算结果为
true
为null()

使用控件确定我知道怎么做,但我想知道为什么查询不返回查询,如果可能的话,在没有控件的情况下解决它阅读指定的问题我认为没有
if
语句是不可能的。确定。。。我希望在没有控制的情况下做到这一点。。但是,当limit和start为null时,为什么查询不返回某些内容呢@Mishayou必须查看CodeIgniter的源代码,但我假定
$this->db->limit(null,null)在MySQL中生成
限制0,0
,该限制返回零数据库行。了解。。。我认为使用“null”值时,
$this->db->limit(null,null)处的queryLooking不会考虑限制应返回
限制1
。无论如何,只要添加一个
(如果
;-)