用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1666|回复: 7
收起左侧

[已解决] 用implode将数组转为字符串后系统还是报错。

[复制链接]
发表于 2016-8-26 10:33:44 | 显示全部楼层 |阅读模式
PHP复制代码
 public function style_status(){
            $this->load->model("Mall_model");
            $status = $this->input->post('status');
            $m_s_name = $this->input->post('m_s_name');
            $m_s_id = $this->Mall_model->get_ms_id($m_s_name)->result_array();
        $s_id = implode(" ",$m_s_id);
             if($status != 1 && $status != 2){
                    get_output(8052);
            }
            $result =  $this->Mall_model->update_style_status($s_id, array("status" => $status));
            if($result){
                    get_output(200);
            }
    }
复制代码
这是controller的代码

PHP复制代码
 public function update_style_status($s_id, $data){
            $this->db->where('s_id', $s_id);
            return $this->db->update(MALL_STYLE, $data);
    }
复制代码
这是model的代码


HTML复制代码
<p>Severity: Notice</p>
<p>Message:  Array to string conversion</p>
<p>Filename: controllers/Mall_shops.php</p>
<p>Line Number: 298</p>
 
复制代码
这是报的错。

求大神解救
发表于 2016-8-26 11:09:19 | 显示全部楼层
骚年丶 发表于 2016-8-26 10:58
这是改进后的,我直接通过自增ID取到m_s_id,不转换为字符串,直接将数组传递到MODEL的方法里面。
这是 ...

會報錯正常,因為 where in 也是吃一維陣列
也就是你拿到 $m_s_id 時,必須跑 foreach() 去獲取 id
得到這樣的陣列 :
array(
  0=>152,
  1=>77,
  2=>124,
  3=>7789
)

才能放到 where in 裡面操作

 
发表于 2016-8-26 10:39:32 | 显示全部楼层
implode() 應該只支持一維陣列
但你 result_array() 出來的會是二維
 楼主| 发表于 2016-8-26 10:43:47 | 显示全部楼层
Closer 发表于 2016-8-26 10:39
implode() 應該只支持一維陣列
但你 result_array() 出來的會是二維

那我用serialize可以吗?
发表于 2016-8-26 10:47:18 | 显示全部楼层
骚年丶 发表于 2016-8-26 10:43
那我用serialize可以吗?

得看你要達到甚麼目的
你的需求是甚麼 ?
 楼主| 发表于 2016-8-26 10:48:49 | 显示全部楼层
Closer 发表于 2016-8-26 10:47
得看你要達到甚麼目的
你的需求是甚麼 ?

这个数组应该只有一组数据,我只想要数组里的value。
 楼主| 发表于 2016-8-26 10:58:22 | 显示全部楼层
PHP复制代码
public function style_status(){
        $this->load->model("Mall_model");
        $status = $this->input->post('status');
        $id = $this->input->post('id');
        $m_s_id = $this->Mall_model->get_ms_id($id)->result_array();
     //   $s_id = serialize($m_s_id);
       // $s_id = implode(" ",$m_s_id);
        if($status != 1 && $status != 2){
                get_output(8052);
        }
        $result =  $this->Mall_model->update_style_status($m_s_id, array("status" => $status));
        if($result){
                get_output(200);
        }
    }
复制代码
这是改进后的,我直接通过自增ID取到m_s_id,不转换为字符串,直接将数组传递到MODEL的方法里面。
PHP复制代码
public function update_style_status($s_id, $data){
        $this->db->where_in('s_id', $s_id);
        return $this->db->update(MALL_STYLE, $data);
    }
复制代码
这是改了后的MODEL,把where改为where_in。但还是要报错

PHP复制代码
<p>Severity: Notice</p>
<p>Message:  Array to string conversion</p>
<p>Filename: database/DB_query_builder.php</p>
<p>Line Number: 805</p>
复制代码
这是报的错。。怎么破。
 楼主| 发表于 2016-8-26 11:36:31 | 显示全部楼层
Closer 发表于 2016-8-26 11:09
會報錯正常,因為 where in 也是吃一維陣列
也就是你拿到 $m_s_id 時,必須跑 foreach() 去獲取 id
得到 ...

好的,解决了。。谢谢大神。。

本版积分规则