我对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);
}
}
如上所述如果我在控制器中单独称呼它们,那么它们都会像魅力一样工作。所以喜欢
$this->MainModel->updateA($data);
OR
$this->MainModel->updateB($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);
}
MODEL:
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更新调用的错误日志结果:
[2015年12月3日14:13:15欧洲/柏林] -----------开始A -----------
[03-Dec-2015 14:13:15欧洲/柏林]更新
tablePos
SETpos1
= 5,pos2
= 6 WHEREid
= 1[2015年12月3日14:13:15欧洲/柏林] -----------停止A -----------
[2015年12月3日14:13:15欧洲/柏林] -----------开始B -----------
的结果
$this->MainModel->updateA($position);
// $this->MainModel->updateB($names);
[2015年12月3日14:23:23欧洲/柏林] -----------开始A -----------
[03-Dec-2015 14:23:23 Europe / Berlin] UPDATE
tablePos
SETpos1
= 5,pos2
= 6 WHEREid
= 1[2015年12月3日14:23:23欧洲/柏林] -----------停止A -----------
的结果
// $this->MainModel->updateA($position);
$this->MainModel->updateB($names);
[2015年12月3日14:25:14欧洲/柏林] -----------开始B -----------
[03-Dec-2015 14:25:14 Europe / Berlin] UPDATE
tableNames
SETname
='AAAA',type
= 9 WHEREid
= 1 [03-Dec-2015 14:25:14欧洲/柏林]更新
tableNames
设置name
='BBBBB',type
= 2 WHEREid
= 2[03-Dec-2015 14:25:14 Europe / Berlin] UPDATE
tableNames
SETname
='CC',type
= 4 WHEREid
= 3[2015年12月3日14:25:14欧洲/柏林] -----------停止B -----------
它停止了。没有错误。当我激怒它们时,错误日志会显示其他php错误。所以这对我来说绝对神秘......
答案 0 :(得分:1)
尝试更改方法以使用局部变量而不是类属性$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
更新时的第二次调用,该类仍保留在首次更新期间使用的属性,因为这里不需要它们,它们会导致错误。
但是我不确定这些值是如何反映在您记录的查询中的。
答案 1 :(得分:0)
抱歉,我无法添加评论,因此我会在此处添加评论。
在Codeigniter文档中说
https://ellislab.com/codeigniter/user-guide/general/models.html#anatomy
其中Model_name是您的类的名称。类名必须首字母大写,其余名称为小写
并且您的模型名称不符合此规则。