2012-11-20 42 views
1

由于某种原因,此SQL语句不起作用。谁能告诉我为什么? (这是一个笨网站,如果该事项)为什么这个MySQL INSERT不能在CI中工作?

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

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 
错误

我的表被称为“用户”,我有一个'first_name'和'id'列。

想法?

编辑

只是因为它似乎要拿出一点我要澄清的是,我路过这里的变量有不带引号或反引号。他们被添加到某处(并且它似乎是 - >查询方法,但我无法想象这是真的?..但是不知道,因为它是我的第一个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'; 
    } 
} 
+2

“first_name”周围的引号正在打破您的查询 –

+0

@JohnConde我认为这可能是一个报价问题。但是我并没有把它们放在那里,变量被动态地分配,并且在这个过程中加入了引号。什么是更好的方式来做我想要的? –

+0

在sintax中的整数也不能被quetes包围(即'WHERE id = 151') – Epsil0neR

回答

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; 
} 

如果$场没有固定,你可以使用转义功能。
编辑:
$ this-> db-> escape()将在变量周围添加引号,以便您将再次收到错误。

+0

这可能是问题所在 - 我不相信你可以使用PDO在MySQL中绑定字段名称。 – sgroves

+0

好的。我正在查看CI用户指南中的查询绑定示例,我认为字段名称可以用相同的方式处理。 –

+0

哦,哦。我用你的代码说话太快,即使我得到这个错误 错误编号:1054 \t \t未知列“在“字段列表” \t \t更新用户设置的''” FIRST_NAME'first_name'' = ''000' WHERE ID = '151' \t \t文件名:/Applications/MAMP/htdocs/NOIR_FINAL/models/member_model.php \t \t行号:45 的行情仍然存在,但我传递变量绝对是免费的。 (first_name上面有反引号内的单引号..它会被奇怪地解释。) –

相关问题