Tôi thấy có hai vấn đề với những gì bạn đã đưa vào Câu hỏi của mình. Đầu tiên trông giống như một lỗi đánh máy. Sau:
html <- "<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>"
Bạn có:
query <- c('INSERT INTO table (htmlfield) VALUES (\"', html, '"')
^^^^^^^^^^^^^^^
Lưu ý rằng bạn thoát khỏi một chuỗi nhưng không thoát khỏi chuỗi kia. Bạn không cần phải thoát khỏi chúng, nhưng không quan trọng nếu bạn làm vậy. Ý của bạn cũng là '")'
đối với chuỗi cuối cùng, tôi nghi ngờ, là nguồn thực sự của lỗi mà bạn đang gặp phải. paste
thay vì c
hữu ích hơn ở đây. Nếu tôi kết hợp chúng, chúng tôi nhận được:
query <- paste('INSERT INTO table (htmlfield) VALUES ("', html, '")', sep = "")
mà chúng tôi có thể sử dụng trực tiếp:
dbSendQuery(con, query)
Vấn đề thứ hai, và một vấn đề mà nhiều người mắc phải là nhầm lẫn giữa biểu diễn in của một đối tượng với chính đối tượng đó. Nếu chúng tôi in query
, chúng tôi thấy điều này:
> query
[1] "INSERT INTO table (htmlfield) VALUES (\"<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>\")"
Biểu diễn in của chuỗi luôn nằm trong ""
dấu ngoặc kép, và chẳng hạn như "
nội bộ cần được thoát ra. Những gì bạn muốn xem là chuỗi thực tế. Chúng ta có thể làm điều đó với cat
hoặc writeLines
- Tôi thích cái sau hơn vì nó thêm "\n"
đến cuối chuỗi một cách tự động:
> writeLines(query)
INSERT INTO table (htmlfield) VALUES ("<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>")
Lưu ý cách "
bây giờ không đã trốn thoát. Đó là SQL sẽ được thực thi bởi máy chủ cơ sở dữ liệu. Nếu đó là SQL hợp lệ cho DB của bạn thì nó sẽ hoạt động.