Irgendwo hat jede
DB-Komponente eine Quote/Escape-Funktion, welche man unbedingt nutzen sollte. (wenn es nicht anders geht und man auf Biegen und Brechen SQLs manuell bauen will)
Es gibt Szenarien, die durch Parameter nicht abgedeckt werden können, etwa "IN" mit einer variablen Anzahl Einträge. Wohl dem, dessen Datenbank temporäre Tabellen unterstützt: dann muss die
SQL-Anweisung zerlegt werden die Erstellung einer temporären Tabelle mit einer Spalte, die die "IN-Werte" aufnimmt, das Füllen dieser Tabelle mit den Werten per INSERT mit Parameter und einem anschließenden Umbau der ursprünglichen Abfrage auf "IN (SELECT x FROM tmp)" oder auch einem JOIN.