Не можете да свързвате имена на колони и таблици, само данни. Трябва да посочите таблицата и след това да се свържете за вашия '%calendar weekday%'
.
$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);
Ако искате да използвате динамични имена на таблици / колони, трябва да изпълните минималния бял списък на тези елементи. Можете да създадете динамичен бял списък, като попитате базата данни кои колони са валидни за дадена таблица на базата данни. Например:
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`
Можете да поставите цялата тази информация в масиви и след това да проверите дали имената на таблица/колона, използвани в заявката, са в масивите. Трябва да се обърне допълнително внимание на имената на таблици и колони, като се уверите, че за тези имена не се използват ключови/резервирани думи.
И накрая, използвайте обратни отметки около валидираните имена на таблица/колона, когато извиквате стойностите за динамичните заявки. Това ще покрие всички потенциални промени в списъка с ключови/резервирани думи и ще осигури допълнителен слой на защита.