= ecm.db
:description: Namespace für direkten SQL-Zugriff auf die ECM-Datenbank via ado.ExecuteSQL. Unterstützt parametrisierte Abfragen mit %s-Platzhaltern zum Schutz vor SQL-Injection.
:keywords: ecm.db, SQL, ADO, ado.ExecuteSQL, Datenbankzugriff, SQL-Injection
:page-tags: api, db, overview

Der Namespace `ecm.db` ermöglicht direkten SQL-Zugriff auf die Datenbank des ECM-Servers über den `ado.ExecuteSQL`-Job.

NOTE: Der verbindende Benutzer benötigt entsprechende Datenbankzugriffsrechte auf dem Server.
Datenmanipulationsoperationen (INSERT, UPDATE, DELETE) müssen über eine Registry-Einstellung am Applikationsserver explizit aktiviert werden.

[cols="1,3"]
|===
|Methode |Beschreibung

|xref:api/db/select.adoc[select()]
|Führt ein SQL-Statement aus und gibt das geparste Ergebnis zurück.
|===

== SQL-Injection-Schutz

Zur Vermeidung von SQL-Injections bietet `select()` einen Parametermechanismus mit Platzhaltern.
Niemals Benutzereingaben direkt via String-Formatierung in SQL einbauen:

[source,python]
----
# Falsch — anfällig für SQL-Injection
sql = f"SELECT * FROM benutzer WHERE benutzer = '{username}'"

# Richtig — Platzhalter verwenden
result = ecm.db.select(
    "SELECT * FROM benutzer WHERE benutzer = %s",
    username,
)
----
