Nie można powiązać nazw kolumn i tabel, tylko dane. Musisz określić tabelę, a następnie powiązać dla swojego '%calendar weekday%'
.
$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);
Jeśli chcesz używać dynamicznych nazw tabel/kolumn, powinieneś przeprowadzić minimalną białą listę tych elementów. Możesz zbudować dynamiczną białą listę, pytając bazę danych, jakie kolumny są prawidłowe dla danej tabeli bazy danych. Na przykład:
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`
Możesz umieścić wszystkie te informacje w tablicach, a następnie sprawdzić, czy nazwy tabel/kolumn użyte w zapytaniu znajdują się w tablicach. Należy zwrócić uwagę na nazwy tabel i kolumn, upewniając się, że dla tych nazw nie są używane żadne słowa kluczowe/zastrzeżone.
Na koniec, podczas wywoływania wartości dla zapytań dynamicznych używaj backticków wokół zweryfikowanych nazw tabel/kolumn. Obejmuje to wszelkie potencjalne zmiany na liście kluczy / słów zastrzeżonych i zapewnia dodatkową warstwę ochrony.