【问题标题】:sql update codeignitersql更新codeigniter
【发布时间】:2012-07-17 15:08:06
【问题描述】:

我正在使用 codeIgniter.. 当我的table= tbl_tickets.id=$ticket_id 时,我想更新表列is_close 我正在这样做:-

$data=array(
            'is_close'=>1
            );
        $this->db->where('id',$title_id);
        $this->db->update('tbl_tickets',$data);

我也这样做了:-

$sql = "UPDATE tbl_tickets SET is_close={1} WHERE id='$title_id'";
$this->db->query($sql);

两者都不起作用,即我的表没有将值更新为 1,并且浏览器中也没有显示错误。 :(

已编辑:包括我的模型部分:

function setClosePost($title_id){
        $sql = "UPDATE tbl_tickets SET is_close=0 WHERE id='$title_id'";
        $this->db->query($sql);
        // $data=array(
        //     'is_close'=>1
        //     );
        // $this->db->where('id',$title_id);
        // $this->db->update('tbl_tickets',$data);
     }

我的控制器:-

function closePost(){
        $this->load->model('helpdesk_model');
        $this->helpdesk_model->setClosePost($this->input->post('title_id'));
      }

【问题讨论】:

  • 您是否尝试过在 CodeIgniter 的上下文之外运行查询?您确定$title_id 包含您期望的值吗?
  • @Colin 是的,我将 $title_id 作为模型函数的参数。
  • 使用echo $this->db->last_query(); 打印出查询。然后尝试在数据库上手动运行它,例如通过 phpMyAdmin。
  • @avinashse 使用这个 { return $this->db->update('tbl_tickets',$data); }

标签: sql codeigniter activerecord sql-update


【解决方案1】:

首先,通过前检查$title_id

var_dump($title_id);

然后,在更新之前和之后尝试“选择具有此 id 的行”。

$query = $this->db->get_where('tbl_tickets', array('id' => $id));  

foreach ($query->result() as $row)
{
    var_dump($row->is_close);
}

$data=array(
            'is_close'=>1
            );
        $this->db->where('id',$title_id);
        $this->db->update('tbl_tickets',$data);

$query = $this->db->get_where('tbl_tickets', array('id' => $id));

foreach ($query->result() as $row)
{
    var_dump($row->is_close);
}

然后,给出你的表结构。

【讨论】:

  • 要使代码在编号列表中工作,请在其前面加上 8 个空格,而不是 4。这很奇怪。
  • 使用 var_dump(), string '' (length=0)
【解决方案2】:

就这样试试

$sql = "UPDATE tbl_tickets SET is_close='1' WHERE id=".$title_id;
$this->db->query($sql);

【讨论】:

  • “试试这个”答案在 Stackoverflow 上的价值很低。即使解决方案对您来说看似基本/直观/不言自明,也会有不熟悉该技术/语法的研究人员。每个答案都应该包含一个解释,旨在教育/授权 OP 和成千上万的未来研究人员。请记住,这绝不是一对一的互动——因为旧页面用于关闭新页面,所以这个答案对于帮助用户解决类似问题也是不可或缺的。
【解决方案3】:

就这样试试吧

**function edit($close,$id) {
$sql = "UPDATE tbl_tickets SET is_close= ?  WHERE id = ? ";
 $this->db->query($sql, array($close,$id));
}**

【讨论】:

  • “试试这个”答案在 Stackoverflow 上的价值很低。即使解决方案对您来说看似基本/直观/不言自明,也会有不熟悉该技术/语法的研究人员。每个答案都应该包含一个解释,旨在教育/授权 OP 和成千上万的未来研究人员。请记住,这绝不是一对一的互动——因为旧页面用于关闭新页面,所以这个答案对于帮助用户解决类似问题也是不可或缺的。
【解决方案4】:

首先使用get方法检查ticket_id是否存在。

另一件事是始终在模型中的函数中使用 return,以便您可以通过 if(function_name){...}else{...} 进行检查

那么如果你的get方法返回数据正确,试试

模型方法

public function set_closed($ticket_id){
    $this-db->set(array(
            'is_close'=>1
            ));
    $this->db->where('id',$ticket_id);
    $this->db->update('tbl_tickets');
    return true;
}

然后在您的控制器

中检查
if($this->Ticket_model->set_closed($ticket_id) == true){
    echo 'ticket set to closed correctly';
}else{
    echo 'there is some error on updating database'.$this->db->error(); // to checkout db error .
}

【讨论】:

    【解决方案5】:

    要处理此类错误,我的意思是如果数据库中没有发生反射,则使用以下步骤解决此类错误。

    1) 使用 $this->db->last_query() 函数打印查询,使用它我们可以确保我们的变量具有正确的值(不应该为空或未定义),使用我们也可以确保 SQL 查询是否有效。

    2) 如果 SQL 查询有效,则打开 phpmyadmin 并在 phpmyadmin 中触发相同的查询,如果查询列或表名无效,则会返回错误。

    使用这种方式是交叉检查我们的 SQL 查询问题的最佳方式。

    我希望它会起作用。

    谢谢

    【讨论】:

      【解决方案6】:

      您正在尝试更新整数(INT)类型值,只需与您的列数据类型进行交叉检查,如果那是 varchar,那么您必须将值放在单引号或双引号中。

      像这样 $data=array('is_close'=> '1');

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        • 2018-06-23
        • 2012-12-11
        • 2016-03-25
        • 1970-01-01
        相关资源
        最近更新 更多