我是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
SETpos1
= 5,pos2
= 6 WHEREid
= 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
SETpos1
= 5,pos2
= 6 WHEREid
= 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
SETname
= ‘AAAA’,type
= 9 WHEREid
= 1 [03-Dec-2015 14:25:14 Europe/Berlin]UPDATE
tableNames
SETname
= ‘BBBBB’,type
= 2 WHEREid
= 2[03-Dec-2015 14:25:14 Europe/Berlin] UPDATE
tableNames
SETname
= ‘CC’,type
= 4 WHEREid
= 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更新时的第二个调用,该类仍保留在第一次更新期间使用的属性,因为这里不需要它们,它们会导致错误.
但是我不确定这些值是如何反映在您记录的查询中的.