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

私のテーブルは「users」と呼ばれ、「first_name」列と「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-> escape()は変数の前後に引用符を追加するので、再びエラーが発生します。

于 2012-11-20T17:58:27.887 に答える