【问题标题】:CodeIgniter UPDATE query not workingCodeIgniter UPDATE 查询不起作用
【发布时间】:2012-09-20 15:04:29
【问题描述】:

我对 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 查询没有。

【问题讨论】:

  • 你的意思是它不工作?你能详细说明一下吗?
  • 您也可以在一个查询中进行更新,使用print_r($row) 查看查询返回的结构。您也可能在$old_order 上进行了 pos SQL 注入
  • 您是否打印了更新语句并手动运行以检查语句本身是否有效?
  • @مبرمج السلطنة:已经说过,但我再说一遍:小心 SQL 注入。如果您发布此内容,您将很快被黑客入侵。保重!

标签: php codeigniter


【解决方案1】:

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

  1. 您从表cat 中选择所有内容,其中cat_order 等于2 ($old_older);
  2. 在所有返回的记录中,您只取一行 ($row = $query->row());
  3. 您更新返回的唯一行,即记录集中的第一行,将它的新值设置为上一次选择提取的相同值 ($row->cat_order),使用的 ID 我不知道它来自哪里,并且指向哪一行;
  4. 您更新由第一个选择返回的唯一行,由其 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));

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢所有解决方案,但所有解决方案都不适用于我我不知道 w7y 这不可能以编程方式 ؟
    【解决方案3】:

    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 );
    

    【讨论】:

    • 还有 cat_order 字段,是 varchar 还是 int?
    • 先生。 Kemal Fadillah 我的意思是我可以 print_r($row) 并显示所有数据但更新查询不起作用。
    • 感谢所有我发现 Jquery 的问题
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 2017-08-10
      • 1970-01-01
      • 2017-02-15
      • 2018-09-14
      • 2022-01-03
      • 2014-06-12
      • 2016-05-19
      • 1970-01-01
      相关资源
      最近更新 更多