SQL Abfrage und execute dynamisch aufbauen
Hallo,
ich versuche gerade eine SQL Abfrage dynamisch aufzubauen, unter der Verwendung der DB Klasse von Contao.
Der Code ist nur zum Testen, um es grundsätzlich zu verstehen ... eine feste Abfrage hat ohne Probleme funktionert.
PHP-Code:
$searchItems = explode(" ", strip_tags(trim($_GET['keywords'])) );
for($i=0;$i<count($searchItems);$i++)
{
if($searchFields != "") { $searchFields .= " OR "; }
if($searchVars != "") { $searchVars .= "', '"; }
$searchFields .= "tl_calendar_events.title LIKE ? OR tl_calendar_events.teaser LIKE ? OR tl_calendar_events.treffpunkt LIKE ? OR tl_content.headline LIKE ? OR tl_content.text LIKE ?";
$searchVars .= $searchItems[$i]."', '".$searchItems[$i]."', '".$searchItems[$i]."', '".$searchItems[$i]."', '".$searchItems[$i];
}
// $searchVars = implode(",", $searchVars);
$result = $this->Database->prepare("SELECT *, tl_calendar_events.id AS eventId, tl_calendar_events.alias AS eventAlias, tl_calendar_events.title AS eventTitle , tl_calendar_events.teaser AS eventTeaser FROM tl_calendar_events
LEFT JOIN tl_content ON (tl_calendar_events.id = tl_content.pid)
WHERE ($searchFields)
AND tl_content.ptable = 'tl_calendar_events' AND tl_calendar_events.categories LIKE ? GROUP BY tl_calendar_events.title")->execute( $searchVars, $searchCategories );
Ich bekomme aber hier immer den Fehler, dass die Anzahl der Argumente falsch ist.
Dann wollte ich die $searchVars als Array "sammeln" und im execute folgendermaßen übergeben:
implode("', '", $searchVars)
was aber zum gleichen Fehler führt.
Warum kann man nicht wie gewohnt im Execute ein Array übergeben bzw. wie bekomme ich
die dynamsiche Abfrage dann zusammen?
Wie gesagt, wenn ich im execute die zu ersetzenden ? durch Variablen hart eintrage, dann klappt das auch, aber
das ist nicht Sinn der Sache.
Danke für Hinweise.
Mark