为什么这个MySQL INSERT不能在CI中工作?

时间:2012-11-20 17:53:36

标签: php codeigniter

由于某种原因,此SQL语句无效。谁能告诉我为什么? (这是一个Codeigniter网站,如果这很重要)

这是我的模型(我的错误指向我)

public function edit_profile($ID, $field, $new_info)
{
    $sql = "UPDATE users SET ?=? WHERE id=?";
    $query = $this->db->query($sql, array($field, $new_info, $ID)); // <<<< LINE 42
    return $query;
}

这就是我得到的错误

Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''first_name'='oooo' WHERE id='151'' at line 1
UPDATE users SET 'first_name'='oooo' WHERE id='151'
Filename: /Applications/MAMP/htdocs/MY_SITE/models/member_model.php
Line Number: 42

我的表名为'users',我有一个'first_name'和'id'列。

想法?

修改

仅仅因为它似乎有点出现我想澄清我在这里传递的变量没有引号或背景。它们被添加到某个地方(它看起来像 - &gt;查询方法,但我想不到这是真的吗?不过,但是,因为它是我的第一个CI项目)

这是传递给模型的控制器......

public function profileEdit()
{
    $ID = $this->the_user->id;
    $field = $this->input->post('edit_field')
    $field = strstr($field,'_edit', true);
    $new_info = $this->input->post('new_info');

    $this->load->model('Member_model');
    if( $this->Member_model->edit_profile( $ID, $field, $new_info )){
        echo 'success';
    }
    else
    {
        echo 'error';
    }
}

1 个答案:

答案 0 :(得分:4)

我建议像这样使用:

public function edit_profile($ID, $field, $new_info)
{
    $sql = "UPDATE users SET $field =? WHERE id=?"; # UPDATED (remove $this->db->escape())
    $query = $this->db->query($sql, array($new_info, $ID)); // <<<< LINE 42
    return $query;
}

如果$ field未得到保护,您可以使用转义功能 编辑:
$ this-&gt; db-&gt; escape()将在变量周围添加引号,以便再次出错。