PHP Funktion mit unbekannten Werten
bearbeitet von 1unitedpowerIch würde die Filter-Logik von PHP komplett nach MySQL verfrachten.
Du kannst in der WHERE-Klausel ausdrücken, dass du nur nach einem Namen filtern willst, wenn auch wirklich ein Name angebgen wurde. Das sähe dann so aus `WHERE (? IS NULL OR name = ?)`. Bei `bind_param` müsstest du dann beide `?` durch `$name` ersetzen lassen. Wenn `$name === null` ist, dann wird die Klausel zu `WHERE (NULL IS NULL OR name = NULL)`, das heißt die Bedingung ist immer wahr und es wird kein Datensatz gefiltert. Wenn `$name === 'Biff'` ist, dann wird die Klausel zu `WHERE ('Biff' IS NULL OR name = 'Biff')` und der Filter ist aktiv. Der Filter lässt sich dann auch einfach kombinieren:
~~~php
function zeiterfassung($mysqli, $name = null, $projektnummer = null, $datum_von = null, $datum_bis = null) {
$select = "
SELECT id, code, projektnummer, name, datum, betreff, anzStunden, jahr, monat, tag
FROM zeiterfassung
WHERE (? IS NULL OR name = ?)
AND (? IS NULL OR projektnummer = ?)
AND (? IS NULL OR datum_von > ?)
AND (? IS NULL OR datum_bis < ?)";
$query = $mysqli->prepare($select);
$query->bind_param(
'ssssiiii',
$name, $name,
$projektnummer, $projektnummer,
$datum_von, $datum_von,
$datum_bis, $datum_bis
);
// …
}
~~~
PHP Funktion mit unbekannten Werten
bearbeitet von 1unitedpowerIch würde die Filter-Logik von PHP komplett nach MySQL verfrachten.
Du kannst in der WHERE-Klausel ausdrücken, dass du nur nach einem Namen filtern willst, wenn auch wirklich ein Name angebgen wurde. Das sähe dann so aus `WHERE (? IS NULL OR name = ?)`. Bei `bind_param` müsstest du dann beide `?` durch `$name` ersetzen lassen. Wenn `$name === null` ist, dann wird die Klausel zu `WHERE (NULL IS NULL OR name = NULL)`, das heißt die Bedingung ist immer wahr und es wird kein Datensatz gefiltert. Wenn `$name === 'Biff'` ist, dann wird die Klausel zu `WHERE ('Biff' IS NULL OR name = 'Biff')` und der Filter ist aktiv. Der Filter lässt sich dann auch einfach kombinieren:
~~~php
function zeiterfassung($mysqli, $name = null, $projektnummer = null, $datum_von = null, $datum_bis = null) {
$select = "
SELECT id, code, projektnummer, name, datum, betreff, anzStunden, jahr, monat, tag
FROM zeiterfassung
WHERE (? IS NULL OR name = ?)
AND (? IS NULL OR projektnummer = ?)
AND (? IS NULL OR datum_von > ?)
AND (? IS NULL OR datum_bis < ?)";
$mysqli->prepare($select);
$mysqli->bind_param(
'ssssiiii',
$name, $name,
$projektnummer, $projektnummer,
$datum_von, $datum_von,
$datum_bis, $datum_bis
);
// …
}
~~~