Mam tabelę companies
, która ma dwie kolumny o nazwach name
i address
. Uruchamiając poniższy kod, nowe dane są wstawiane do tabeli:Uciekając pojedynczy cytat z zapytania SQL
my_name = "my company name"
my_address = "ABC"
query = "INSERT INTO companies (name,address) VALUES ('#{my_name}','#{my_address}');"
ActiveRecord::Base.connection.execute(query);
Jeśli zmienię my_name
wartość z "my company name"
do "John's company"
, będę się błąd składni. To dlatego, że zapytanie się:
"INSERT INTO companies (name,address) VALUES ('John's company','ABC');"
i 'John's company'
ma pojedynczy cudzysłów wewnątrz niej.
Biorąc pod uwagę, że już użyłem podwójnego cudzysłowu do definicji ciągu zapytania, jak mogę pozbyć się tego błędu dotyczącego pojedynczego cudzysłowu w mojej wartości?
uciec z \? – rgin
if my_name.include? ('\' ') My_name.sub (/' /, '\' ')? –
To jest naprawdę zły pomysł ... ryzykujesz ataki SQL injection, nawet jeśli unikniesz pojedynczych cudzysłowów z odwróconymi ukośnikami. Musisz zrozumieć kodowanie znaków, ale na to naiwne podejście jest poważny (znany) exploit. Użyj parametrów wiązania w zapytaniu i pozwól DBMS bezpiecznie przetransportować wartości. – d11wtq