php – CodeIgniter:连续两个模型方法导致内部服务器错误

我是CodeIgniter的新手,并试图让我的第一个项目完成.我有两个ajax db-update函数(对于他们自己)工作完全正常.

(因为查询就像这样工作,我为了这个例子而简化:)

    public function updateA($data) {

            $this->pos1    = $data['pos1'];
            $this->pos2    = $data['pos2']; 

            $this->db->where('id', 1);

            $result = $this->db->update('tablePos', $this);
    }

    public function updateB($data) {

            foreach ($data as $value) {

                    $this->name    = $value['name'];
                    $this->type    = $value['type']; 
                    $this->db->where('id', $value['ID']);

                    $result = $this->db->update('tableNames', $this);
            }

    }

如上所述,如果我单独使用Controller控制它们,它们就会像魅力一样.所以喜欢

$this->MainModel->updateA($data);

要么

$this->MainModel->updateB($data);

但不是

$this->MainModel->updateA($data);
$this->MainModel->updateB($data);

然后执行第一个查询但不执行第二个查询.我先说的是哪一个没什么区别.如果我连续两次调用,只执行第一次,我的ajax函数返回a

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

我花了整整昨晚搜索 – 没有头绪…… 🙁

编辑:

我现在将所有内容都分成一个测试用例:

控制器:

        public function parse()
    {
            $this->load->model('MainModel');

            $position =  '{"ID":1,"pos1":5,"pos2":6}';
            $position = json_decode($position, true);

            $names =  '[{"ID":1,"name":"AAAA","type":9},{"ID":2,"name":"BBBBB","type":2},{"ID":3,"name":"CC","type":4}]';
            $names = json_decode($names, true);

            $this->MainModel->updateA($position);
            $this->MainModel->updateB($names);
    }

模型:

        public function updateA($data_a) {
            error_log("----------- start A -----------");
            $this->pos1    = $data_a['pos1'];
            $this->pos2    = $data_a['pos2']; 
            $this->db->where('id', 1);
            $result = $this->db->update('tablePos', $this);
            error_log($this->db->last_query());
            error_log("----------- stop A -----------");
    }


    public function updateB($data_b) {
            error_log("----------- start B -----------");
            foreach ($data_b as $value) {

                    $this->name    = $value['name'];
                    $this->type    = $value['type']; 
                    $this->db->where('id', $value['ID']);

                    $result = $this->db->update('tableNames', $this);
                    error_log($this->db->last_query());
            }
            error_log("----------- stop B -----------");
    }

BOTH更新调用的错误日志结果:

[03-Dec-2015 14:13:15 Europe/Berlin] ———– start A ———–

[03-Dec-2015 14:13:15 Europe/Berlin] UPDATE tablePos SET pos1 = 5, pos2 = 6 WHERE id = 1

[03-Dec-2015 14:13:15 Europe/Berlin] ———– stop A ———–

[03-Dec-2015 14:13:15 Europe/Berlin] ———– start B ———–

结果为

    $this->MainModel->updateA($position);
    // $this->MainModel->updateB($names);

[03-Dec-2015 14:23:23 Europe/Berlin] ———– start A ———–

[03-Dec-2015 14:23:23 Europe/Berlin] UPDATE tablePos SET pos1 = 5, pos2 = 6 WHERE id = 1

[03-Dec-2015 14:23:23 Europe/Berlin] ———– stop A ———–

结果为

    // $this->MainModel->updateA($position);
    $this->MainModel->updateB($names);

[03-Dec-2015 14:25:14 Europe/Berlin] ———– start B ———–

[03-Dec-2015 14:25:14 Europe/Berlin] UPDATE tableNames SET name = ‘AAAA’, type = 9 WHERE id = 1 [03-Dec-2015 14:25:14 Europe/Berlin]

UPDATE tableNames SET name = ‘BBBBB’, type = 2 WHERE id = 2

[03-Dec-2015 14:25:14 Europe/Berlin] UPDATE tableNames SET name = ‘CC’, type = 4 WHERE id = 3

[03-Dec-2015 14:25:14 Europe/Berlin] ———– stop B ———–

它就停止了.没有错误.当我激怒它们时,错误日志会显示其他php错误.所以这对我来说绝对神秘……

最佳答案 尝试更改方法以使用局部变量而不是类属性$this,如下所示:

public function updateA($data_a) {
            error_log("----------- start A -----------");
            $this->db->where('id', 1);
            $updateData = array(
                               'pos1' => $data_a['pos1'],
                               'pos2' =>  $data_a['pos2'],
                           ); 
            $result = $this->db->update('tablePos', $updateData);
            error_log($this->db->last_query());
            error_log("----------- stop A -----------");
    } 

  public function updateB($data_b) {
            error_log("----------- start B -----------");
            foreach ($data_b as $value) {
                  $updateData = array(
                               'name' => $value['name'],
                               'type' =>  $value['type'],
                           ); 
                    $this->db->where('id', $value['ID']);

                    $result = $this->db->update('tableNames',$updateData);
                    error_log($this->db->last_query());
            }
            error_log("----------- stop B -----------");
    }

可能的原因可能是因为在加载模型时初始化了类属性.

对于使用$this更新时的第二个调用,该类仍保留在第一次更新期间使用的属性,因为这里不需要它们,它们会导致错误.

但是我不确定这些值是如何反映在您记录的查询中的.

点赞