Die SQL Injection geschieht nicht im Query selber. Du musst sicherstellen, dass du nur Queries ausführst, die du auch ausführen willst. Sprich: Du musst die Situation abfangen, dass dir jemand (z.b. über ein Formular) ein Query übergeben kann, welches du danach in deinem Code als „gewöhnlichen“ Parameter anschaust (z.b. die Vertragsnummer) und dynamisch zu einem Query zusammenbastelst - und ausführst.
also muss im Prepared Statement jede Variable übergeben
werden, damit es sicher ist.
…dem Platzhalter übergeben werden, ja. Damit übernimmt die Datenbank die Prüfung auf Gültigkeit.
Generell solltest du alle queries als prepared Statements machen (auch wenn keine Benutzereingabe vorliegt), da diese weniger Resourcen verbrauchen und meist schneller sind als Standardqueries.