Codeigniter数据库更新

时间:2011-11-16 09:49:09

标签: mysql database codeigniter

表格就像这样

enter image description here

我想通过指定ArchiveID和RecipientID

来更新DecryptionDate

这是我的代码

$this->load->database();
$date = date("Y-m-d H:i:s");
$data = array('DecryptionDate' => $date);
$array = array('ArchiveID'=>$archiveID.'','RecipientID'=>$userID.'');
$this->db->where($array);
$this->db->update('log', $data);
if ($this->db->affected_rows() > 0) {
    echo "SUCCESS";
} else {
    echo "FAIL";
}

我的问题是我只能在$archiveID为911且$userID为test01时才更新数据,但当$archiveID为911且$userID为test02时程序无法更新

添加echo $this->db->last_query();后我

  

UPDATE log SET DecryptionDate ='2011-11-16 20:01:39'WHERE ArchiveID ='911'和RecipientID ='test01'

当ArchiveID为test01且更新为SUCCESS

  

UPDATE log SET DecryptionDate ='2011-11-16 20:03:10'WHERE ArchiveID ='911'和RecipientID ='test02'

当ArchiveID为test02且更新为FAIL时

我试过这个

$this->load->database();
$date = date("Y-m-d H:i:s");
$this->db->query('UPDATE log
    SET DecryptionDate = \''.$date.'\'
    WHERE ArchiveID = \''.$archiveID.'\' AND RecipientID = \''.$userID.'\'');
if ($this->db->affected_rows() > 0) {
    echo "SUCCESS";
    return TRUE;
} else {
    echo "FAIL";
    return FALSE;
}

但结果仍然相同

并尝试仅检查此类

的RecipientID
$this->load->database();
$date = date("Y-m-d H:i:s");
$this->db->query('UPDATE log
    SET DecryptionDate = \''.$date.'\'
    WHERE RecipientID = \''.$userID.'\'');
if ($this->db->affected_rows() > 0) {
    echo "SUCCESS";
    return TRUE;
} else {
    echo "FAIL";
    return FALSE;
}

使更新成功,只有与RecipientID匹配的记录,但不包含与其他记录重复的ArchiveID

像这样

enter image description here

最后,我使用以下代码而不是通过CI测试使用常见php文件的更新,结果也是失败

$date = date("Y-m-d H:i:s");
$strSQL = "UPDATE log SET DecryptionDate = '".$date."' WHERE ArchiveID = '911' AND RecipientID = 'test02' ";
$objQuery = mysql_query($strSQL);
if( mysql_affected_rows($objQuery) != 0 ) 
{ 
    echo (" SUCCESS ");
} else { 

    echo (" FAIL ");
}

所以我认为这必须是数据库问题

这是DB结构 enter image description here

和ArchiveID和RecipientID是索引

enter image description here

4 个答案:

答案 0 :(得分:0)

代码看起来很好。请检查所有字段是否拼写正确,值是否符合预期。

尝试使用这种更详细和调试友好的方式,它应该可以帮助您发现问题(可能$userID包含一个空格,或者像这样的微不足道的事情)。最后调用last_query()以查看查询是否真的是您想要的

//...
var_dump($archiveID);
var_dump($userID);
$this->db->where('ArchiveID',$archiveID);
$this->db->where('RecipientID',$userID);
$data = array('DecryptionDate' => $date);
$this->db->update('log', $data);

// call this to test the correct query; see if is what you intended
echo $this->db->last_query();

答案 1 :(得分:0)

当你说不,你的意思是你不能连接MySQL或phpMyAdmin,或者不,test2上的查询不会返回任何结果?如果第二个是真的,你可以选择*并验证存在的字段吗?我无法帮助,但想想你的数据可能发生了什么。

答案 2 :(得分:0)

我尝试从数据库导出数据并截断它然后导回数据,它可以帮助,问题解决了。

答案 3 :(得分:0)

我已使用此代码检查更新查询状态。

$this->db->where($array);
$status = $this->db->update('log', $data);
if($status)
   echo 'Success';
else
    echo 'Fail';