Liebe/-r Experte/-in,
ich möchte euch noch mal mit einer Frage belästigen.
erstmal zum Szenario:
Ich habe eine Datenbank ua mit der Tabelle Beiträge.
Über Filter wähle ich das anzuzeigende Quartal und die anzuzeigenden Jahre. (checkboxen). Über eine verwaltungsvariable lege ich fest wie weit die Jahre zurückgehen können sollen.
$sql_quittungen=sprintf("select beiträge.* from beitraege where
(
quarter(quittungen.datum)=%s)or
quarter(quittungen.datum)=%s)or
quarter(quittungen.datum)=%s)or
quarter(quittungen.datum)=%s)
}
and
(
Date_Format(quittungen.datum,’%%Y’) = %s)or
Date_Format(quittungen.datum,’%%Y’) = %s)or
Date_Format(quittungen.datum,’%%Y’) = %s)or
Date_Format(quittungen.datum,’%%Y’) = %s)
)
and
(
mysql_real_escape_string($array_quartal[0]),
mysql_real_escape_string($array_quartal[1]),
mysql_real_escape_string($array_quartal[2]),
mysql_real_escape_string($array_jahre[0]),
mysql_real_escape_string($array_jahre[1]),
));
Soll heissen:
Wenn checkbox quartal 1 gesetzt ist, zeige mir alle Beiträge aus dem ersten Quartal.
Wenn checkbox quartal 2 gesetzt ist, zeige mir alle Beiträge aus dem zweiten Quartal.
Wenn checkbox 2012 gesetzt ist gesetzt ist, zeige mir alle Beiträge aus 2012 und dem Quartal xy.
usw.
Also habe ich derzeit die Anzahl der auswählbaren Jahre auf 4 festgelegt. Also ab 2009 bis 2012 kann alles ausgewählt werden. Im Array $jahreanzahl_array sind die Werte 999 oder Jahreszahl.
Nun möchte ich die Anzahl der zurückreichenden Jahre dynamisch machen. Also sowas wie eine Konfigurationsvariable $jahrezurueck.
=> $jahrezurueck =5. Dann kann der User die letzten 4 jahre + das aktuelle auswählen. Bei $jahrezurueck=3 nur die letzten 2 Jahre + das aktuelle Jahr. usw.
Eine Idee ist das Ganze mit einer for-schleife zu machen und dann die sql-Abfrage via string Operationen zusammen zu bauen. (Quartal wegen der Übersichtlichkeit weggelassen). Die forschleife geht von 0 bis count(jahrezurueck_array).
$sql_teil1= „select * from beitrage where „;
$sql_string_tei2=““;
for($d=0;$d
Das sind reine strings und funktioniert. Alternativ habe ich probiert nur die gesetzten Variablen in ein Array zu packen und dies dann zu durchlaufen.
Die Abfrage ist nur ein string. Funktioniert.
Nun zur Frage:
Aber wie kriege ich das mit dem mysql_real_escape_string und den Platzhaltern hin?
Oder ist der Denkansatz falsch?
Also das sowas rauskommt:
(gesetzt ist 1., 2. und 3. Quartal
2011 und 2012 und 2009
$array_jahre=array(2012,2009);
$array_quartal = array(1,2,3)
…
and
(
quarter(quittungen.datum)=%s)or
quarter(quittungen.datum)=%s)or
quarter(quittungen.datum)=%s)
}
and
Date_Format(quittungen.datum,’%%Y’) = %s)or
Date_Format(quittungen.datum,’%%Y’) = %s))
group by kategorie_id having sum(wert)!=‚NULL‘",
mysql_real_escape_string($array_quartal[0]),
mysql_real_escape_string($array_quartal[1]),
mysql_real_escape_string($array_quartal[2]),
mysql_real_escape_string($array_jahre[0]),
mysql_real_escape_string($array_jahre[1]),
);
Eine Überlegung geht gegen implode und „or“-Verknüpfung.
Aber echo „mysql_real_escape_string“; funktioniert so leider nicht.