Anda tidak dapat mengikat nama kolom dan tabel, hanya data. Anda perlu menentukan tabel dan kemudian mengikat untuk '%calendar weekday%'
.
$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);
Jika Anda ingin menggunakan nama tabel/kolom dinamis, Anda harus melakukan daftar putih minimal item tersebut. Anda dapat membuat daftar putih dinamis dengan menanyakan database kolom apa yang valid untuk tabel database tertentu. Misalnya:
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`
Anda dapat menempatkan semua informasi ini dalam array dan kemudian memeriksa untuk memastikan nama tabel/kolom yang digunakan dalam kueri ada di dalam array. Pertimbangan ekstra untuk nama tabel dan kolom harus dilakukan, memastikan bahwa tidak ada kata kunci/cadangan yang digunakan untuk nama-nama ini.
Terakhir, gunakan backticks di sekitar nama tabel/kolom yang divalidasi saat memanggil nilai untuk kueri dinamis. Ini akan mencakup segala kemungkinan perubahan pada daftar kata kunci/cadangan dan memberikan lapisan perlindungan tambahan.