【问题标题】:Codeigniter set value in database error数据库错误中的 Codeigniter 设置值
【发布时间】:2012-10-23 12:45:11
【问题描述】:

身份证 ans1_r ans2_r ans3_r ans4_r ans5_r ans6_r

我在 anketemale 表中有这些字段。所有字段都是整数。

$answer 是列名。 $id 是所选行的 id。 因此,我想在特定行中+1,并且只是其中一个 ans 字段。我写了这段代码:

function upisi_malu($id,$answer)
    {
        $anketadb = $this->load->database('anketa',TRUE);

    $anketadb->select($answer);
    $anketadb->where('id', $id); 
    $q = $anketadb->get('anketemale');

    foreach ($q->result() as $row)
    {
    $ans = $row->$answer + 1;
    }
    echo $answer; //just to know I echo them, and values are right
    echo $ans;
    echo $id;
    $anketadb->set($answer, $ans); 
    $anketadb->where('id', $id); 
    $anketadb->insert('anketemale'); 
}

为什么这段代码将每次更改都写入新行?我只想更改已经存在的行。

【问题讨论】:

  • 因为您正在运行插入查询,而您的数据库显然没有将 id 设置为唯一键。
  • Id 设置为自动递增,并且在每一行中都会创建一个具有更大 id 的新行,所以我认为这与此无关。
  • 自动递增和将其设置为键不是一回事。在结构中查看您在 phpMyAdmin 中的表,查看底部并查看是否设置了任何索引我猜没有。

标签: database codeigniter insert set


【解决方案1】:
foreach ($q->result() as $row)
{
    $ans = $row->$answer + 1;
    $anketadb->set($answer, $ans); 
    $anketadb->where('id', $id); 
    $anketadb->update('anketemale');
}

根据您的信息,这是我能想到的最佳猜测。在您的示例中,您使用的是 insert 而不是 updateinsert 总是会创建一个新行...update 只会在 where 匹配时更新存在的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2014-03-25
    相关资源
    最近更新 更多