簡體   English   中英

Codeigniter活動記錄使用單引號插入查詢

[英]Codeigniter active records insert query with single quotes

我正在嘗試使用codeigniter活動記錄將單個記錄添加到數據庫表中。 原始數據是從XML解析的,我已經測試了數據是否存在並在其相應的變量名中正確無誤。

數據從控制器傳遞到視圖,如下所示:

$data['questionId'] = $question['id'];
$data['answerText'] = $question->answer;
$q = $this->mobile_user_model->save_actual_answers($data);

模型插入函數如下所示:

function save_actual_answers($data) {
    $insert = array(
        'answerText' => $data['answerText'],
        'responseId' => $data['responseId'],
        'questionId' => $data['questionId']
    );
    $q = $this->db->insert('actual_answers', $insert);
    return $q;
}

我遇到的問題是codeigniter不會自動將單引號添加到為answerText提供的字符串值中。 運行該函數時,出現以下錯誤:

Error Number: 1054
Unknown column 'Dan' in 'field list'
INSERT INTO `actual_answers` (`answerText`, `responseId`, `questionId`)
VALUES (Dan, 12, 7)

這告訴我,answer.text的值(在這種情況下,值為Dan)正試圖由codeigniter輸入到表中而沒有單引號。 但是,如果我自己對單引號進行硬編碼並將其附加到answerText數據中,如下所示:

'answerText' => "'" . $data['answerText'] . "'"

查詢成功運行,但是單引號與字符串一起添加到表中,因此數據庫中的記錄如下所示:

'Dan'    12    7

有人以前遇到過這個問題嗎,還是我在做一些我看不到的大錯?

$data['questionId'] = $question['id'];
$data['answerText'] = $question->answer;

這兩行對我來說似乎令人懷疑。 第一行,$ question是一個數組,第二行,問題是一個對象,獲取屬性答案?! 您確定您的日志中沒有任何PHP錯誤嗎?

另外,在活動記錄插入文檔中,它也非常清楚地指出:注意:所有值都會自動轉義,從而產生更安全的查詢。 您應該真正確定您是否進行了任何修改,因為從這個問題出發,您沒有什么可猜測的。 我認為您應該使用庫轉義功能來引用而不是自己引用。 就像是

$insert = array(
      'answerText' => $this->db->escape_str(data['answerText']),
      'responseId' => $data['responseId'],
      'questionId' => $data['questionId']
);

感謝您的回答。 代碼之所以這樣,是因為id是XML中問題的屬性,而答案是XML中問題的子元素。 它是正確的。 我實際上是這樣修復的:

$insert = array(
        'answerText' => (string)$data['answerText'], // Needed to declare it was a string 
        'responseId' => $data['responseId'],
        'questionId' => $data['questionId']
    );

對我來說,這似乎是一種技巧,但確實有效。 事實是,我在項目的其他部分中使用了這個插入數組來插入沒有此聲明的字符串,並且效果很好。 我不確定在這種情況下為什么沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM