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,我对CodeIgniter是个新手,我正在努力完成我的第一个项目。我有两个ajaxdb更新函数,它们(本身)工作得非常好 (因为查询本身是有效的,所以为了这个示例,我简化了:) 及 如前所述,如果我在控制器中称它们为“单独”的话,它们都会像一个魔咒一样工作。。很像 $this->MainModel->updateA($data); 或 但不是 $this->MainModel->updateA($data); $this->MainModel->update

我对CodeIgniter是个新手,我正在努力完成我的第一个项目。我有两个ajaxdb更新函数,它们(本身)工作得非常好

(因为查询本身是有效的,所以为了这个示例,我简化了:)

如前所述,如果我在控制器中称它们为“单独”的话,它们都会像一个魔咒一样工作。。很像

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

但不是

$this->MainModel->updateA($data);
$this->MainModel->updateB($data);
然后执行第一个查询,但不执行第二个查询。我先给谁打电话没什么区别。如果我连续调用这两个函数,则只执行第一个函数,我的ajax函数返回一个

加载资源失败:服务器响应状态为500(内部服务器错误)

我整晚都在寻找-毫无线索…:(

编辑:

现在,我将所有内容隔离到一个测试用例中:

控制器:

        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 -----------");
    }
两次更新调用的错误日志结果:

[03-Dec-2015 14:13:15欧洲/柏林]------------启动一个-----------

[03-Dec-2015 14:13:15欧洲/柏林]更新
tablePos
SET
pos1
=5,
pos2
=6,其中
id
=1

[03-Dec-2015 14:13:15欧洲/柏林]------------停下来-----------

[03-Dec-2015 14:13:15欧洲/柏林]--------------开始B-----------

结果

    $this->MainModel->updateA($position);
    // $this->MainModel->updateB($names);
    // $this->MainModel->updateA($position);
    $this->MainModel->updateB($names);
[03-Dec-2015 14:23:23欧洲/柏林]------------开始新的一天-----------

[03-Dec-2015 14:23:23欧洲/柏林]更新
tablePos
SET
pos1
=5,
pos2
=6,其中
id
=1

[03-Dec-2015 14:23:23欧洲/柏林]--------停止A-----------

结果

    $this->MainModel->updateA($position);
    // $this->MainModel->updateB($names);
    // $this->MainModel->updateA($position);
    $this->MainModel->updateB($names);
[03-Dec-2015 14:25:14欧洲/柏林]--------------开始B-----------

[03-Dec-2015 14:25:14欧洲/柏林]更新
tableNames
SET
name
='AAAA',
类型
=9,其中
id
=1[03-Dec-2015 14:25:14欧洲/柏林]

更新
表名
设置
名称
='BBBBB',
类型
=2,其中
id
=2

[03-Dec-2015 14:25:14欧洲/柏林]更新
表名
设置
名称
='CC',
类型
=4,其中
id
=3

[03-Dec-2015 14:25:14欧洲/柏林]------------B站-----------


它只是停止了。没有错误。当我引发其他php错误时,错误日志确实显示了这些错误。所以这对我来说绝对是个谜…

对不起,我无法添加注释,所以我将在这里添加注释

在Codeigniter文档中说

其中Model_name是类的名称。类名的第一个字母必须大写,其余部分必须小写


并且模型的名称不符合此规则。

尝试更改方法以使用局部变量而不是类属性
$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 -----------");
    } 

一个可能的原因可能是加载模型时初始化了类属性

对于使用
$this
进行更新时的第二次调用,该类仍然保留在第一次更新期间使用的属性,并且由于此处不需要这些属性,因此会导致错误


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

只需将传递变量名的模型函数更改为
updateB($b_数据)
updateA($a_数据)
。检查您的错误日志,了解实际的完整错误和调用堆栈-在您的问题中发布它#事实上已经是这样了。这两种方法都使用不同的名称获取发送数组变量…:(没有引发php错误(错误报告处于打开状态!)我试图通过放置错误日志()函数中的消息。启动查询时脚本将停止。没有错误,没有写入wo日志文件…
print\r($data)
并发布其值!!不幸的是,这不是解决方案。我将其重命名为Main\u model,但结果是一样的。看起来很有希望!总是乐于帮助:)
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 -----------");
    }