1

UPDATE我对 CodeIgniter查询有疑问。

我的模型:

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

4 回答 4

3

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

  1. 您从表cat中选择cat_order等于 2 ( $old_older) 的所有内容;
  2. 返回的所有记录中,您只取一行($row = $query->row());
  3. 您更新返回的唯一行,即记录集中的第一行,将它的新值设置为前一个选择提取的相同值,($row->cat_order),使用一个我不知道它来自哪里以及指向哪一行的 ID;
  4. 您更新第一个 select返回的唯一行,由其 ID ( $row->id) 标识,并给出其$old_older值 ( SET cat_order='$old_order'),在本例中为 2。

我的意思是,您的查询很好,但是您使用相同的值进行更新,这就是您看不到更改的原因。还是我忽略了一些明显的东西?

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

$sql = "UPDATE table SET column = ? WHERE id = ?";
$this->db->query($sql, array($value, $id));
于 2012-09-28T18:45:54.143 回答
1

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

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

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

于 2012-09-28T18:07:00.403 回答
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 );
于 2012-09-28T17:54:09.857 回答
0

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

于 2019-03-01T14:23:15.057 回答