Saya melihat dua masalah dengan apa yang Anda sertakan dalam Pertanyaan Anda. Yang pertama sepertinya salah ketik. Setelah:
html <- "<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>"
Anda memiliki:
query <- c('INSERT INTO table (htmlfield) VALUES (\"', html, '"')
^^^^^^^^^^^^^^^
Perhatikan Anda lolos dari satu string tetapi tidak yang lain. Anda tidak perlu melarikan diri dari mereka, tetapi tidak masalah jika Anda melakukannya. Anda juga bermaksud '")'
untuk string terakhir yang, saya duga, adalah sumber sebenarnya dari kesalahan yang Anda dapatkan. paste
daripada c
lebih berguna di sini. Jika saya menggabungkan ini, kami mendapatkan:
query <- paste('INSERT INTO table (htmlfield) VALUES ("', html, '")', sep = "")
yang dapat kita gunakan secara langsung:
dbSendQuery(con, query)
Masalah kedua, dan salah satu yang dibuat banyak orang, adalah mengacaukan representasi tercetak dari suatu objek dengan objek itu sendiri. Jika kita mencetak query
, kita melihat ini:
> 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>\")"
Representasi tercetak dari string selalu diapit ""
tanda kutip ganda, dan dengan demikian "
internal internal perlu melarikan diri. Apa yang ingin Anda lihat adalah string yang sebenarnya. Kita bisa melakukannya dengan cat
atau writeLines
- Saya lebih suka yang terakhir karena menambahkan "\n"
ke akhir string secara otomatis:
> 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>")
Perhatikan bagaimana "
sekarang tidak lolos. Itu adalah SQL yang akan dieksekusi oleh server database. Jika itu adalah SQL yang valid untuk DB Anda, maka itu akan berhasil.