Выключение единой цитаты в SQL-запросе

У меня есть столовые companies , у которых есть два столбца с name и address . Запустив следующий код, новые данные вставляются в таблицу:

 my_name = "my company name" my_address = "ABC" query = "INSERT INTO companies (name,address) VALUES ('#{my_name}','#{my_address}');" ActiveRecord::Base.connection.execute(query); 

Если я my_name значение my_name с "my company name" на "John's company" , я получу синтаксическую ошибку. Это связано с тем, что запрос становится:

 "INSERT INTO companies (name,address) VALUES ('John's company','ABC');" 

и 'John's company' имеет в себе единую кавычку.

Учитывая, что я уже использовал двойную кавычку для определения строки запроса, как я могу избавиться от этой ошибки относительно одиночной кавычки в моем значении?

Если вы должны сделать это таким образом, используйте метод quote на объекте соединения:

quote (value, column = nil)
Выводит значение столбца, чтобы предотвратить атаки SQL-инъекций.

Так что-то вроде этого:

 my_name = ActiveRecord::Base.connection.quote("John O'Neil") my_address = ActiveRecord::Base.connection.quote("R'lyeh") query = "INSERT INTO companies (name,address) VALUES (#{my_name}, #{my_address})" ActiveRecord::Base.connection.execute(query); 

Никогда не пытайтесь обрабатывать свои собственные цитаты. И не пытайтесь использовать двойные кавычки для цитирования строкового литерала SQL, для чего нужны одинарные кавычки; двойные кавычки предназначены для цитирования идентификаторов (таких как имена таблиц и столбцов) в большинстве баз данных, но MySQL использует обратные ссылки для этого.