【发布时间】:2011-11-16 09:49:09
【问题描述】:
桌子是这样的
我想通过指定 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();后我有
更新
logSETDecryptionDate= '2011-11-16 20:01:39' 其中ArchiveID= '911' ANDRecipientID= 'test01'
当 ArchiveID 为 test01 且更新成功时
和
更新
logSETDecryptionDate= '2011-11-16 20:03:10' 其中ArchiveID= '911' ANDRecipientID= 'test02'
当 ArchiveID 为 test02 且更新失败时
我试过了
$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 匹配的记录使更新成功
喜欢这个
最后,我用下面的代码而不是通过 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 ");
}
所以我认为这一定是数据库问题
这是数据库结构
ArchiveID 和 RecipientID 是索引
【问题讨论】:
-
$array = array('ArchiveID'=>$archiveID.'','RecipientID'=>$userID.'');将此行替换为$array = array('ArchiveID'=>$archiveID,'RecipientID'=>$userID); -
可能与您的问题无关,但是您写
'ArchiveID'=>$archiveID.'',而不仅仅是'ArchiveID'=>$archiveID,有什么原因吗? -
谢谢,我已经试过
$array = array('ArchiveID'=>$archiveID,'RecipientID'=>$userID);,结果还是一样 -
您是否检查过 test02 条目不包含任何额外的空白字符?试试
SELECT * FROM log WHERE RecipientID = 'test02';,看看它是否包含第一个数字的第二个条目。 -
是的,我做了那个测试,结果还是一样
标签: mysql database codeigniter