更新查询未更新相应的行

时间:2014-01-26 21:05:19

标签: php mysql codeigniter

我在Codeigniter中遇到了一个奇怪的问题。我正在运行更新行的查询:

function set_counter($key, $value){
    echo "$key : $value => ";
    $this->db->query("UPDATE counter SET counter.`value` = ? WHERE counter.`key` = ?", array($value, $key));
    return $this->db->affected_rows();
}

基准测试显示此函数被调用并且查询确实运行:

UPDATE counter SET counter.`value` = 1 WHERE counter.`key` = 'left_banner_start_id' 

该函数返回'1',表示1行已更新。

但实际上该行未在数据库中更新,value列始终为'0'

我做错了什么解决方案?

修改

问题变得更加怪异,当我退出()我的函数时,行实际上会更新,否则它不会:

function set_counter($key, $value){
    echo "$key : $value - ";
    $this->db->query("UPDATE counter SET counter.`value` = ? WHERE counter.`key` = ?", array($value, $key));
    //print_r($this->db->affected_rows());
    exit();
} 

修改

好吧,如果我在system / core / Output.php中退出()执行,它会起作用:

// --------------------------------------------------------------------

    // Does the controller contain a function named _output()?
    // If so send the output there.  Otherwise, echo it.
    if (method_exists($CI, '_output'))
    {
        $CI->_output($output);
    }
    else
    {
        exit();
        echo $output;  // Send it to the browser!
    }

但如果我在回显$ output后退出()它不起作用:

// --------------------------------------------------------------------

    // Does the controller contain a function named _output()?
    // If so send the output there.  Otherwise, echo it.
    if (method_exists($CI, '_output'))
    {
        $CI->_output($output);
    }
    else
    {
        echo $output;  // Send it to the browser!
        exit();
    }

修改

在我看来,这条线阻止了它:

<img src="<?php echo base_url().$recent_ad['photo_thumb']; ?>" width="28" height="27" />

这个在另一个视图中:

<img src="<?php echo base_url().$featured_agent['photo_medium']; ?>" width="84" height="84" />

这里photo_thumb和photo_medium是数据库中另一个表中的列,它们具有空值。我填写了列,现在它工作正常。

但为什么呢?是什么原因?

1 个答案:

答案 0 :(得分:0)

您是否尝试将代码切换为有效记录语法?

function set_counter($key, $value){
    $this->db->where('key', $key)->update('counter', array('value' => $value));
    return $this->db->affected_rows();
}