> ## Documentation Index
> Fetch the complete documentation index at: https://docs.varios-ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL and PostgreSQL

> Der MySQL and PostgreSQL-Konnektor ermöglicht die Verbindung zu MySQL- und PostgreSQL-Datenbanken und die Ausführung von SQL-Abfragen. Mit diesem Konnektor können Sie Daten aus beiden Datenbanktypen abrufen und verarbeiten.

## Optionen

<ParamField body="connectionString" type="string">
  Die Verbindungszeichenkette zur Datenbank (z.B.
  `mysql://user:pass@host:port/dbname`).
</ParamField>

<ParamField body="query" type="string" required>
  Das SQL-Statement, das ausgeführt werden soll. Werte aus den Argumenten werden
  über die Platzhalter `:1` bis `:10` eingesetzt. Setzen Sie Platzhalter nicht in
  Anführungszeichen.
</ParamField>

## Platzhalter im SQL-Statement

Die Platzhalter `:1` bis `:10` verweisen auf die Argumente `argument1` bis `argument10`. Maßgeblich ist dabei die Nummer, nicht die Reihenfolge im Statement.

Die Werte werden als Parameter an die Datenbank übergeben und dort ausschließlich als Werte behandelt, nicht als Teil des Statements. Das verhindert SQL-Injection und macht ein eigenes Maskieren oder Quoten unnötig.

Daraus ergeben sich drei Regeln:

* Platzhalter stehen immer ohne Anführungszeichen im Statement: `WHERE kunde = :1` ist korrekt, `WHERE kunde = ':1'` nicht.
* Platzhalter stehen nur für Werte. Tabellen- und Spaltennamen müssen fest im Statement hinterlegt sein.
* Zusätzliche Zeichen wie Wildcards werden an den Platzhalter angehängt, statt in ihn hineingeschrieben zu werden.

<Warning>
  Das Statement wird nur mit den Platzhaltern ausgeführt, für die auch ein
  Argument gefüllt ist. Verwenden Sie deshalb genau die Nummern, für die Werte
  übergeben werden, und keine zusätzlichen Platzhalter für optionale Argumente,
  die leer bleiben können.
</Warning>

### Suche mit LIKE

Die Prozentzeichen gehören als eigenständiger Text in das Statement und werden mit dem Platzhalter verbunden:

```sql theme={null}
WHERE kunde LIKE CONCAT('%', :1, '%')
```

Nicht verwendbar ist `WHERE kunde LIKE '%:1%'`.

### Datums- und Zahlenwerte

Argumente werden immer als Text übergeben. Verwenden Sie für Datumswerte das Format `yyyy-mm-dd`:

```sql theme={null}
WHERE datum >= :2 AND datum < :3
```

Fragen Sie einen Zeitraum mit `>=` für den Beginn und `<` für das Ende ab. Bei Spalten mit Uhrzeit fehlen sonst die Einträge des letzten Tages. In PostgreSQL können Sie die Umwandlung mit `:2::date` ausdrücklich im Statement vornehmen, in MySQL mit `CAST(:2 AS DATE)`.

## Argumente

<ParamField body="argument1" type="string" required>
  Wert für den ersten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument2" type="string">
  Wert für den zweiten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument3" type="string">
  Wert für den dritten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument4" type="string">
  Wert für den vierten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument5" type="string">
  Wert für den fünften Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument6" type="string">
  Wert für den sechsten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument7" type="string">
  Wert für den siebten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument8" type="string">
  Wert für den achten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument9" type="string">
  Wert für den neunten Parameter im SQL-Statement.
</ParamField>

<ParamField body="argument10" type="string">
  Wert für den zehnten Parameter im SQL-Statement.
</ParamField>

## Beispiel

Die folgende Abfrage sucht Verträge eines Kunden, deren Laufzeit in einem bestimmten Zeitraum endet. Der Kundenname wird als Teilbegriff gesucht, der Zeitraum über zwei Datumswerte eingegrenzt.

Option `query`:

```sql theme={null}
SELECT vertragsnummer, kunde, produkt, status, laufzeit_ende
FROM vertraege
WHERE kunde LIKE CONCAT('%', :1, '%')
  AND laufzeit_ende >= :2
  AND laufzeit_ende <  :3
ORDER BY laufzeit_ende ASC;
```

Beschreibung der Argumente:

```
argument1: Name oder Namensbestandteil des Kunden / Beispiel: `Muster GmbH`
argument2: Beginn des Zeitraums. Format: `yyyy-mm-dd` / Beispiel: `2025-01-01`
argument3: Ende des Zeitraums, nicht enthalten. Format: `yyyy-mm-dd` / Beispiel: `2025-07-01`
```

## Fehlerbehebung

<AccordionGroup>
  <Accordion title="Die Abfrage liefert keine Daten, obwohl sie direkt auf der Datenbank funktioniert">
    Prüfen Sie, ob die Platzhalter in Anführungszeichen stehen. `':1'` wird als
    fester Text ausgeführt und nicht durch das Argument ersetzt. Schreiben Sie
    stattdessen `:1` und verbinden Sie Wildcards mit `CONCAT`.
  </Accordion>

  <Accordion title="Die Abfrage schlägt fehl, sobald ein optionales Argument leer bleibt">
    Es werden nur die Platzhalter ersetzt, für die ein Argument gefüllt ist.
    Verwenden Sie im Statement ausschließlich Nummern, für die auch Werte
    übergeben werden.
  </Accordion>

  <Accordion title="Ein Datumsfilter greift nicht wie erwartet">
    Übergeben Sie Datumswerte im Format `yyyy-mm-dd`. Bei Spalten mit Uhrzeit
    grenzen Sie den Zeitraum mit `>=` und `<` ein, damit die Einträge des
    letzten Tages enthalten sind.
  </Accordion>
</AccordionGroup>
