Vous ne pouvez pas lier les noms de colonne et de table, uniquement les données. Vous devez spécifier la table, puis lier votre '%calendar weekday%'
.
$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);
Si vous souhaitez utiliser des noms de table/colonne dynamiques, vous devez effectuer la liste blanche minimale de ces éléments. Vous pouvez créer une liste blanche dynamique en demandant à la base de données quelles colonnes sont valides pour une table de base de données donnée. Par exemple :
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`
Vous pouvez placer toutes ces informations dans des tableaux, puis vérifier que les noms de table/colonne utilisés dans la requête se trouvent dans les tableaux. Une considération supplémentaire pour les noms de table et de colonne doit être effectuée, en s'assurant qu'aucun mot clé / réservé n'est utilisé pour ces noms.
Enfin, utilisez des backticks autour des noms de table/colonne validés lors de l'appel des valeurs pour les requêtes dynamiques. Cela couvrira toute modification potentielle de la liste des mots clés / réservés et fournira une couche de protection supplémentaire.