CodeIgniter UPDATE查询不起作用

时间:2012-09-28 17:48:39

标签: php codeigniter

我遇到CodeIgniter UPDATE查询问题。

我的模特:

function update_order($id,$old_order){

    //Update The order
    $query = $this->db->query("SELECT * FROM cat WHERE `cat_order`='$old_order' ");
    $row =  $query->row();

    $this->db->query("UPDATE cat SET cat_order='".$row->cat_order."' WHERE id='".$id."' ");
    $this->db->query("UPDATE cat SET cat_order='$old_order' WHERE id ='".$row->id."' ");

}  

SELECT查询正在100%运行,但两个UPDATE查询却没有。

4 个答案:

答案 0 :(得分:3)

好吧,让我们看看发生了什么(至少,我能理解的是什么);

  1. 您选择表catcat_order等于2 $old_older)的所有内容;
  2. 在返回的所有记录中,您只需要一行($row = $query->row());
  3. 您更新了返回的唯一行,即记录集中的第一行,将其新值设置为上一个select($row->cat_order)提取的相同值,使用ID我不知道它来自哪里从哪一行开始;
  4. 您更新第一个选择返回的唯一行,由其ID($row->id)标识,并提供其$old_older值(SET cat_order='$old_order'),这个案例2.
  5. 我的意思是,您的查询很好,但是您使用相同的值进行更新,这就是您没有看到更改的原因。 还是我忽略了一些明显的东西?

    顺便说一句,你已经注入了洞;要么使用Active Record,要么使用带占位符的查询绑定:

    $sql = "UPDATE table SET column = ? WHERE id = ?";
    $this->db->query($sql, array($value, $id));
    

答案 1 :(得分:1)

只需使用Active Record更新它。它为您清理数据。不用担心SQL注入。

$this->db->where('id',$id); 
$this->db->set('cat_order',$row->cat_order);
$this->db->update('cat');

对第二次更新查询执行相同操作。

答案 2 :(得分:0)

很可能id是主键,并且必须没有引号:

$this->db->query(
  "UPDATE cat SET cat_order='".$row->cat_order."' WHERE id = " .$id );

$this->db->query(
  "UPDATE cat SET cat_order='$old_order' WHERE id = " . $row->id );

答案 3 :(得分:0)

检查您要更新的列是否存在于数据库结构中。