Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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_Codeigniter - Fatal编程技术网

Php Codeigniter,其中或和来自会话的阵列

Php Codeigniter,其中或和来自会话的阵列,php,codeigniter,Php,Codeigniter,我在会话->用户数据('usershop')中有以下数组: 我必须从另一个表中选择数据: 只能从该表中选取链码和商店码匹配的行 我试过这个: foreach ($this->session->userdata('usershop') as $usr => $usrshop) { $where = $this->db->where(array('chain_code' => $usrshop['shop_chain'], 'shop_code'

我在
会话->用户数据('usershop')
中有以下数组:

我必须从另一个表中选择数据:

只能从该表中选取
链码
商店码
匹配的行

我试过这个:

foreach ($this->session->userdata('usershop') as $usr => $usrshop) {
        $where = $this->db->where(array('chain_code' => $usrshop['shop_chain'], 'shop_code' => $usrshop['shop_code']));
    }
    return $this->db->get('wd2dbschema_config.cfg_shop')->result();
但所有这些都是取错行,结果是:

SELECT * FROM "wd2dbschema_config"."cfg_shop" WHERE "chain_code" = '9001' AND "shop_code" = '1' AND "chain_code" = '9002' AND "shop_code" = '1' AND "chain_code" = '9001' AND "shop_code" = '2' AND "chain_code" = '9001' AND "shop_code" = '3'
我如何做到这一点,使它只需要匹配的行

像这样:

SELECT * FROM "wd2dbschema_config"."cfg_shop" WHERE ("chain_code" = '9001' AND "shop_code" = '1') OR ("chain_code" = '9002' AND "shop_code" = '1') OR ("chain_code" = '9001' AND "shop_code" = '2') OR ("chain_code" = '9001' AND "shop_code" = '3')
试一试

foreach ($this->session->userdata('usershop') as $usr => $usrshop) {
    $where = $this->db->where(array('chain_code' => $usrshop['shop_chain'], 'shop_code' => $usrshop['shop_code']));
    $data[] = $this->db->get('wd2dbschema_config.cfg_shop')->result();
}
return $data;

您可以执行一次every where条件,并需要在数组中捕获它们,在循环完成后,您可以直接传递它。

使用活动记录您可以这样做,请确保将
where()/中的第二个参数传递为null,以便活动记录不会查找第一个参数的比较,第三个参数为FALSE,因此活动记录不会向where子句表达式添加额外的标记

$i = 0;
foreach ($this->session->userdata('usershop') as $usr => $usrshop) {
    if($i==0){
        $this->db->where(" (chain_code = '" . $usrshop['shop_chain'] . "' AND shop_code = '" . $usrshop['shop_code'] . "') ", null, FALSE);
    }else{
        $this->db->or_where(" (chain_code = '" . $usrshop['shop_chain'] . "' AND shop_code = '" . $usrshop['shop_code'] . "') ", null, FALSE);
    }
    $i++;
}
return $this->db->get('wd2dbschema_config.cfg_shop')->result();
$i = 0;
foreach ($this->session->userdata('usershop') as $usr => $usrshop) {
    if($i==0){
        $this->db->where(" (chain_code = '" . $usrshop['shop_chain'] . "' AND shop_code = '" . $usrshop['shop_code'] . "') ", null, FALSE);
    }else{
        $this->db->or_where(" (chain_code = '" . $usrshop['shop_chain'] . "' AND shop_code = '" . $usrshop['shop_code'] . "') ", null, FALSE);
    }
    $i++;
}
return $this->db->get('wd2dbschema_config.cfg_shop')->result();