içinde tek bir tırnaktan kaçma name
ve address
adında iki sütun içeren bir tablo companies
var. Aşağıdaki kodu çalıştırarak, yeni veri tabloya eklenir: Ben "John's company"
için "my company name"
den my_name
değerini değiştirirsenizSQL sorgusunda
my_name = "my company name"
my_address = "ABC"
query = "INSERT INTO companies (name,address) VALUES ('#{my_name}','#{my_address}');"
ActiveRecord::Base.connection.execute(query);
, bir sözdizimi hatası alırsınız.
"INSERT INTO companies (name,address) VALUES ('John's company','ABC');"
ve 'John's company'
bunun içinde tek bir soru işareti bulunan: Sorgu olur olmasıdır.
Sorgu dizesi tanımlaması için zaten çift tırnak işareti kullandım, bu hatadan, değerindeki tek tırnak işareti ile nasıl kurtulabilirim?
bir \ ile kaçmak? – rgin
my_name.include? ('\' ') My_name.sub (/' /, '\' ')? –
Bu gerçekten kötü bir fikir ... ters eğik çizgilerle tek tırnaktan kaçsanız bile SQL enjeksiyon saldırılarını riske atıyorsunuz. Karakter kodlamalarını anlamanız gerekir, ancak bu naif yaklaşımın ciddi (bilinen) bir istisnası vardır. Sorgunuzda bağlama parametrelerini kullanın ve DBMS'nin değerleri güvenli bir şekilde taşımasına izin verin. – d11wtq