Widzę dwa problemy z tym, co zamieściłeś w swoim pytaniu. Pierwszy wygląda na literówkę. Po:
html <- "<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>"
Masz:
query <- c('INSERT INTO table (htmlfield) VALUES (\"', html, '"')
^^^^^^^^^^^^^^^
Zauważ, że unikasz jednego ciągu, ale drugiego nie. Nie musisz im uciekać, ale to nie ma znaczenia, czy to zrobisz. Miałeś na myśli także '")'
dla ostatniego ciągu, który, jak podejrzewam, jest prawdziwym źródłem otrzymywanego błędu. paste
zamiast c
jest tutaj bardziej przydatne. Jeśli je połączę, otrzymamy:
query <- paste('INSERT INTO table (htmlfield) VALUES ("', html, '")', sep = "")
którego możemy użyć bezpośrednio:
dbSendQuery(con, query)
Drugim problemem, który robi wiele osób, jest pomylenie drukowanej reprezentacji obiektu z samym obiektem. Jeśli wypiszemy query
, widzimy to:
> 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>\")"
Wydrukowana reprezentacja ciągu jest zawsze zawarta w ""
podwójne cudzysłowy i jako taki wewnętrzny "
trzeba uciec. To, na co chcesz spojrzeć, to rzeczywisty ciąg. Możemy to zrobić za pomocą cat
lub writeLines
- Wolę to drugie, ponieważ dodaje "\n"
na końcu ciągu automagicznie:
> 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>")
Zwróć uwagę, jak "
są teraz nie uciekł. To jest SQL, który zostałby wykonany przez serwer bazy danych. Jeśli to jest poprawne SQL dla Twojej bazy danych, to zadziała.