2013-04-09 59 views
2

我試圖插入遠程mysql數據庫。我能夠正確連接,並可以查詢'選擇'沒有問題。但是,我無法執行插入到我可以從中選擇的同一個表中。我懷疑它與我的綁定有關,但這與我用來獲取sqlite3的工作幾乎完全相同,我認爲它使用相同的Arel來插入。使用Mysql2的Ruby SQL插入寶石

@result = @db.query("insert into lead_to_processes (case_number, style_of_case) values (?,?)", [ 
     self.case_number.to_blob.force_encoding("UTF-8"), 
     self.style_of_case.to_blob.force_encoding("UTF-8") 
    ] 
) 

最終目標是能夠從模型內部查詢遠程數據庫並向其中插入數據。我嘗試過使用Octopus,但這並不奏效,因爲這些表格將與數據庫不同。

我在數據庫上擁有此用戶的完全權限。

所以從如下指導意見我改變了語法和我得到一個不同的錯誤

Mysql2 ::錯誤:你在你的SQL語法錯誤;

但是我做的查詢現在這個樣子

@db = Mysql2::Client.new(connectionstring) 

@case_number   = @db.escape(self.case_number) 
@style_of_case   = @db.escape(self.style_of_case) 

@db.query("insert into lead_to_processes (case_number, style_of_case) VALUES 
(#{@case_number}, #{@style_of_case}) 

任何意見或指導?我也試着用''封裝我插入的變量

+0

你得到任何錯誤?你可以發佈他們嗎?你有寫數據庫的權限嗎?或只讀? – Mischa 2013-04-09 13:24:37

+0

我不相信mysql2 gem提供了對查詢的綁定,你必須自己創建有效的SQL來傳遞給查詢。 https://github.com/brianmario/mysql2 – mguymon 2013-04-09 13:35:40

+0

你能粘貼拋出的異常嗎? – Egalitarian 2013-04-09 13:39:19

回答

0

是否有可能缺少結束報價?

@db.query("insert into lead_to_processes (case_number, style_of_case) VALUES 
(#{@case_number}, #{@style_of_case}) 

應該

@db.query("insert into lead_to_processes (case_number, style_of_case) VALUES 
(#{@case_number}, #{@style_of_case}") <== notice the quote at the end. 
+0

感謝您的回覆,發佈的答案,因爲你發佈這個,數據中有垃圾字符這是導致錯誤。感謝@Karl的幫助 – Austio 2013-04-09 19:50:58

1

我想有在我的代碼一些奇怪的字符,所以我不得不強迫UTF-8編碼,然後使用GSUB下方拆下的人物,一切現在正在流動。

謝謝你的建議

@db.escape(self.style_of_case.force_encoding("UTF-8")) 
@db.escape(self.case_number.gsub(/[\xC2]/,'').gsub(/[\xA0]/,'').force_encoding("UTF-8"))