The language. Really the problem with SQL is the API. I like having a relational database, but SQL strings are a really crummy way of writing to it.
def insert_person(first_name, last_name)
sql.query("insert into persons values(#{first_name}, #{last_name})")
end
So long as you're not plugging form data directly into that function, that works just fine.This is what binding variables is for, but to use them you're either writing for specific platforms (PSQL, Oracle SQL, etc), or you're using middleware that hides the raw SQL from you.