Ach, jetzt verstehe ich die Array-Sache (glaub ich).
Du hast einen, oder mehrere Seiten, nach denen gesucht werden soll?
Dann nutzt man
WHERE seite = IN(:a, :b, :c)
Da Du aber evtl nicht weißt, wie viele Values (Seiten) abgefragt werden,
musst Du die Platzhalter (:a, :b, :c) dynamisch erstellen.
Info:
Jetzt könnte man ja meinen, dass man einen Platzhalter angibt
WHERE seite = IN(:seiten)
und bei execute ein array übergibt
$stmt->execute([
'seite' => [ // invalid example!
'foo.com',
'bar.com',
'baz.com',
]
]);
Aber das funktioniert nicht.
Die Parameter sind immer key => value (Platzhalter string => value)
Siehe: PDO::PARAM_
* https://www.php.net/manual/de/pdo.constants.php
Es gibt kein PDO::PARAM_
ARRAY.
/endInfo
Also erstellen wir dynamisch n parameter zu einem Kommagetrennten String:
$urls = [
'foo.com',
'bar.com',
'baz.com',
];
$parameters = [];
// Note: using array_values to get $i definitely as a increasing number
foreach (array_values($urls) as $i => $value) {
// Create an array like
// [
// ':value_1' => 'foo.com',
// ':value_2' => 'bar.com',
// ':value_3' => 'baz.com',
// ]
$parameters[":value_{$i}"] = $value;
}
// Create string like
// ":value_1, :value_2, :value_3"
$subSqlString = implode(', ', array_keys($parameters));
$stmt->prepare("SELECT *
FROM TABELLE
LEFT JOIN linkeTabelle ON linkeTabelle.id = rechteTabelle.id
WHERE seite = IN({$subSqlString})
;");
$stmt->execute($parameters);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// do something with $row['...']
}
Alles anzeigen
Sicherheit (Thema SQL-Injection): Zwar nutzen wir hier eine PHP Variable in der SQL query,
aber wir wissen genau, dass in dem erstellten String keine Userdaten enthalten sind.
Es sind immer die von uns selbst erstellten Platzhalter: ":value_1, :value_2, ..."