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