【问题标题】:Codeigniter does NOT INSERT WHEN DELETE query EXISTS in the pageCodeigniter 在页面中存在 DELETE 查询时不插入
【发布时间】:2013-08-31 08:37:33
【问题描述】:

我在 CodeIgniter 中执行插入查询时遇到问题。如果删除查询存在于我的模型中的同一类中,它会以某种方式执行,使我插入的那些在执行后被删除。

这个过程是检查SKLCDE是否在$skills的数组中,如果不在则从数据库中删除。

$this -> db -> select('SKLCDE');
$this -> db -> from('EmployeeSmartsDB');
$this -> db -> where('EMPNUM', $empnum);
$result = $this -> db -> get();

if ($result->num_rows() > 0){
    foreach ($result->result() as $row){
        if(!in_array($row->SKLCDE, $skills)){
            $this->db->where('EMPNUM', $empnum); 
            $this->db->where('SKLCDE', $row->SKLCDE); 
            $this->db->delete('EmployeeSmartsDB');
        }
    }
}

如果新的 SKLCDE 尚未在数据库中,则插入查询将其插入数据库中。

这是我的插入查询代码:

$this -> db -> select('SKLCDE, RECSTS');
$this -> db -> from('EmployeeSmartsDB');
$this -> db -> where('EMPNUM', $empnum);
$this -> db -> where('SKLCDE', $skills[$i]);
$result2 = $this -> db -> get(); 
$data = array(
                       'YRSEM'  => '203101' ,
                       'EMPNUM' => '1234567' ,
                       'UNTCDE' => '1234' ,
                       'EMPCLS' => '1' ,
                       'EMPSTS' => '4' ,
                       'GRDLVL' => '0' ,
                       'SKLCDE' => '5S' ,
                       'QD1RTE' => '0' ,
                       'QD2RTE' => '0' ,
                       'QD3RTE' => '0' ,
                       'QD4RTE' => '0' ,
                       'RECSTS' => 'Y' ,
                       'SMTRTR' => '1234567',
                       'REMARK' => '' ,
                       'FTRNNG' => 'N'
                    );

$this->db->insert('EmployeeSmartsDB', $data);

编辑

这是我现在的代码,但仍然无法正常工作:

for($i=0; $i < count($skills); $i++){
$this -> db -> select('SKLCDE, RECSTS');
$this -> db -> from('EmployeeSmartsDB');
$this -> db -> where('EMPNUM', $empnum);
$this -> db -> where('SKLCDE', $skills[$i]);
$result2 = $this -> db -> get(); 
if($result2->num_rows() == 0){
$data = array(
                       'YRSEM'  => '203101' ,
                       'EMPNUM' => '1234567' ,
                       'UNTCDE' => '1234' ,
                       'EMPCLS' => '1' ,
                       'EMPSTS' => '4' ,
                       'GRDLVL' => '0' ,
                       'SKLCDE' => '5S' ,
                       'QD1RTE' => '0' ,
                       'QD2RTE' => '0' ,
                       'QD3RTE' => '0' ,
                       'QD4RTE' => '0' ,
                       'RECSTS' => 'Y' ,
                       'SMTRTR' => '1234567',
                       'REMARK' => '' ,
                       'FTRNNG' => 'N'
                    );

$this->db->insert('EmployeeSmartsDB', $data);
}
}

【问题讨论】:

  • 首先您要检查 SKLCDE 是否不在您的阵列中,然后将其删除。那么您正在创建一个新数组 $data 并将其插入到您的表中,但是您何时在插入时检查数据是否存在?
  • 只是一个简单的问题:为什么你认为这应该有效?
  • @Deepanshu,其实我已经掌握了数据库的一套技巧。而当数据库中的某项技能不在用户选择的技能中时,必须将其删除。如果用户选择的技能不在数据库中,则将其插入。因此,删除部分的放置位置无关紧要。只是数据库中的技能,包括那些不需要删除的技能在插入后被删除......这就是问题所在。我在插入后检查数据库内容。
  • 没有if条件,即不检查数据是否已经存在,插入的时候是插入完整的数组
  • 我已经编辑了我上面的代码,但它仍然无法正常工作。

标签: php sql sql-server codeigniter


【解决方案1】:

试试这个...

$this->db-> where(array('EMPNUM'=> $empnum, 'SKLCDE' => $skills[$i]))->insert('EmployeeSmartsDB', $data);

【讨论】:

  • 大家好,我认为连续执行两个查询时确实存在问题/BUG。例如,更新然后插入。我通过完全分离这两个查询解决了我上面的问题。我使用 Ajax 来解决我的问题。我先执行 Ajax,然后继续。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2013-08-17
  • 2012-09-14
  • 2017-09-29
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多