【问题标题】:Codeigniter database updateCodeigniter 数据库更新
【发布时间】: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();后我有

更新log SET DecryptionDate = '2011-11-16 20:01:39' 其中ArchiveID = '911' AND RecipientID = 'test01'

当 ArchiveID 为 test01 且更新成功时

更新log SET DecryptionDate = '2011-11-16 20:03:10' 其中ArchiveID = '911' AND RecipientID = '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


【解决方案1】:

代码看起来不错。请检查您的所有字段是否拼写正确,并且值是否符合预期。

尝试像这样更详细和调试友好的方式,它应该可以帮助您发现问题(可能$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();

【讨论】:

  • 在添加 echo $this->db->last_query() 之后我得到了 UPDATE log SET DecryptionDate = '2011-11-16 19:56:16' WHERE ArchiveID = '911' AND RecipientID = 'test01' 更新成功,UPDATE log SET DecryptionDate = '2011-11-16 19:59:58' 其中ArchiveID = '911' AND RecipientID = 'test02' 更新失败
  • 这真的很奇怪......如果你删除第一个where,这是否有效? (仅在 RecipientID = test02 的情况下使用)
  • 能否连接到 MySQL 或 PHP MyAdmin 并手动运行“test02”查询,看看是否有结果?
  • @DavidHoude 不,我不能,所以这一定是数据库问题?
  • @CarryAll 你 var_dump() 编辑了 'test02' 吗?
【解决方案2】:

当你说不时,你的意思是你不能连接到 MySQL 或 phpMyAdmin,或者不,在 test2 上的查询没有返回任何结果?如果第二个是真的,你能做一个选择 * 并验证字段的存在吗?我不禁认为您的数据可能发生了一些事情。

【讨论】:

  • 我可以连接到 MySQL,问题是 test02 上的查询失败,这是我在执行查询之前验证字段是否存在的方式。 $this->load->database(); $this->db->where('ArchiveID', $archid); $query = $this->db->get('log'); foreach ($query->result() as $row) { $recipient = $row->RecipientID; if ((stristr($recipient, $uid) != FALSE) || $recipient == $uid) { //echo $recipient; return true; } } return false;
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 1970-01-01
      • 2018-06-08
      • 2019-06-24
      • 2020-06-11
      • 2021-09-20
      • 2013-06-12
      • 2020-07-12
      • 2012-07-02
      相关资源
      最近更新 更多