1

由于某种原因,此 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

我的表被称为“用户”,我有一个“名字”和“ID”列。

想法?

编辑

仅仅因为它似乎出现了一点,我想澄清一下我在这里传递的变量没有引号或反引号。它们被添加到某个地方(它似乎是 ->query 方法,但我无法想象这是真的?.. 不知道,因为这是我的第一个 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';
    }
}
4

1 回答 1

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->db->e​​scape() 将在变量周围添加引号,因此您将再次收到错误。

于 2012-11-20T17:58:27.887 回答