Rolf B: Werte an eine Funktion übergeben

Beitrag lesen

Hallo,

ich sehe zwei Möglichkeiten.

#1. Schleife

Man prepared das Statement so wie es ist, und zwar zu Beginn der Funktion. Den bind_param macht man an eine Temp-Variable (muss in mysqli so sein), und man bereitet ein leeres Array zum Sammeln der Ergebnisse vor.

Dann durchläuft man das $filter-Array, weist nacheinander jeden Wert darin dieser Temp-Variablen zu, führt das Statement aus und hängt die Ergebnisse an das Sammel-Array an.

Vorteil: Man hat nur ein Statement zu preparen, und die DB kann den Plan dafür gut cachen.

Nachteil: Man muss pro Checkbox einen DB-Roundtrip machen.

#2. Dynamisches SQL

Das ist sehr mühsam, wenn man prepare verwendet. Hier wäre wohl ein Einsatz ohne Prepare besser.

Man bestimmt die Länge des $filter-Array und produziert die WHERE-Bedingung dynamisch. Und zwar so, dass man die Array-Einträge SQL-gerecht transformiert (d.h. die Werte in Hochkomma setzen und passend escapen), und dann mit ", " als $glue (->Doku) implodiert. Das Ergebnis setzt man in die Klammern eines IN Ausdrucks, so dass da nachher z.B. WHERE kategorie IN ('1', '5') steht.

Vorteil: Nur ein DB-Roundtrip

Nachteil: Man muss das SQL zurechtfummeln, wie in schlechten alten mysql-Zeiten.

--

Was in den mir bekannten SQL Servern NICHT funktioniert, ist ein prepared statement mit `WHERE kategorie in (?) und einem Array für den ? Parameter. Aber vielleicht ist MySQL hier mal wieder großzügiger...

Rolf

--
sumpsi - posui - clusi