Você não pode vincular nomes de colunas e tabelas, apenas dados. Você precisa especificar a tabela e, em seguida, vinculá-la ao seu
'%calendar weekday%'
. $stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);
Se você quiser usar nomes dinâmicos de tabela/coluna, você deve executar a lista branca mínima desses itens. Você pode criar uma lista branca dinâmica perguntando ao banco de dados quais colunas são válidas para uma determinada tabela de banco de dados. Por exemplo:
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`
Você pode colocar todas essas informações em matrizes e, em seguida, verificar se os nomes de tabela/coluna usados na consulta estão nas matrizes. Considerações extras para nomes de tabelas e colunas devem ser realizadas, certificando-se de que nenhuma palavra chave/reservada seja usada para esses nomes.
Por fim, use acentos graves em torno dos nomes de tabela/coluna validados ao chamar os valores para as consultas dinâmicas. Isso cobrirá quaisquer possíveis alterações na lista de palavras-chave/reservadas e fornece uma camada adicional de proteção.