ich mich, wenn jemand eine Klärung über den Unterschied zwischen den folgenden Aussagen mit sqlite3 gem mit Ruby 1.9.x hat:Sqlite3 Strings in where-Klauseln scheinen
@db.execute("INSERT INTO table(a,b,c) VALUES (?,?,?)",
some_int, other_int, some_string)
und
@db.execute("INSERT INTO table(a,b,c) VALUES (#{some_int},"+
+"#{some_int}, #{some_string})")
Mein Problem ist: Wenn ich die erste Methode für das Einfügen verwende, kann ich die Spalte "c" nicht mit der folgenden Anweisung abfragen:
SELECT * FROM table WHERE c='some magic value'
Ich kann diese verwenden:
"SELECT * FROM table WHERE c=?", "some magic value"
aber, was ich will wirklich benutzen
"SELECT * FROM table WHERE c IN ('#{options.join("','")}')"
Und dies mit der Art von Einsätzen nicht funktioniert.
Weiß jemand, was der Unterschied auf der Datenbankebene ist, der verhindert, dass die IN
ordnungsgemäß funktioniert?
Während Sie nicht gerade eine Antwort auf Ihre Frage sind, sollten Sie sich unbedingt mit dem Thema [SQL-Injektion] (http://bobby-tables.com/) vertraut machen. – Jan
Wie sieht dein "magischer Wert" wirklich aus und was bedeutet "ich kann nicht nach der" c "Spalte fragen? Ich vermute, dass Sie ein Problem mit einem eingebetteten Anführungszeichen haben und nur wissen müssen, wo Sie ['SQLite3 :: Database.quote '] (http://rubydoc.info/gems/sqlite3/SQLite3/Database) verwenden können. Zitat). –
Ich kenne das Problem der DB Hijacking-aber das ist ein Skript mit der Befehlszeile auf den Benutzerdaten zugeordnet. Sie können tun, was sie wollen, damit :) – user632657