U kunt geen kolom- en tabelnamen binden, alleen gegevens. U moet de tabel specificeren en vervolgens binden voor uw '%calendar weekday%'
.
$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);
Als u dynamische tabel-/kolomnamen wilt gebruiken, moet u de minimale whitelisting van die items uitvoeren. U kunt een dynamische witte lijst maken door de database te vragen welke kolommen geldig zijn voor een bepaalde databasetabel. Bijvoorbeeld:
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`
U kunt al deze informatie in arrays plaatsen en vervolgens controleren of de tabel-/kolomnamen die in de query worden gebruikt, in de arrays staan. Er moet extra aandacht worden besteed aan tabel- en kolomnamen en zorg ervoor dat er geen sleutel/gereserveerde woorden worden gebruikt voor deze namen.
Gebruik ten slotte backticks rond de gevalideerde tabel-/kolomnamen bij het aanroepen van de waarden voor de dynamische query's. Dit dekt eventuele wijzigingen in de lijst met sleutelwoorden/gereserveerde woorden en biedt een extra beschermingslaag.