Sempervivum
Erfahrenes Mitglied
Auf dieses Problem bin ich früher schon mal gestoßen. Ich versuche, eine Lösung zu skizzieren ohne sie zu testen:
AFAIK müssen die Platzhalter beim "IN" so aussehen:
wobei ich davon ausgehe, dass die Anzahl variabel ist.
Den String in den Klammern kannst Du z. B. so erzeugen:
(Man könnte auch eine Verkettung von range, map und implode nehmen, wäre aber IMO unübersichtlicher).
Das Ergebnis kannst Du dann in deine Query einsetzen:
Das Array für die Werte kannst Du dann ähnlich erzeugen:
Jetzt, wo ich das soweit geschrieben habe, fällt mir auf, dass man beides natürlich in einer Schleife erledigen könnte. Das kannst Du selbst noch ändern.
Und am besten alles in eine Funktion packen, damit Du es für andere Queries wieder verwenden kannst.
Wenn man auf Parameter mit Namen verzichten würde, wäre es einfacher aber schlechter lesbar.
AFAIK müssen die Platzhalter beim "IN" so aussehen:
Code:
IN (:param1,:param2,:param3)
Den String in den Klammern kannst Du z. B. so erzeugen:
Code:
$placeholders = '';
for ($nr = 1; $nr <= count($kategorienTradeinBeachten); $nr++) {
if ($nr >1) {
$placeholders .= ', ';
$placeholders .= ':param' . $nr;
}
Das Ergebnis kannst Du dann in deine Query einsetzen:
Code:
IN ($placeholders, 'sammel')
Das Array für die Werte kannst Du dann ähnlich erzeugen:
Code:
$values = [':userid' => $userid, ':set' => $set, ':nummer' => $nummer];
for ($nr = 1; $nr <= count($kategorienTradeinBeachten); $nr++) {
$values[':param' . $nr] = $kategorienTradeinBeachten[$nr - 1];
}
Und am besten alles in eine Funktion packen, damit Du es für andere Queries wieder verwenden kannst.
Wenn man auf Parameter mit Namen verzichten würde, wäre es einfacher aber schlechter lesbar.
Zuletzt bearbeitet: