Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP:Sementara loop tidak berfungsi setelah menyesuaikan SELECT untuk pencegahan injeksi SQL

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat tabel dengan nama variabel php mysql

  2. Fungsi MySQL COT() – Mengembalikan Kotangen Angka di MySQL

  3. Bagaimana cara menyimpan Karakter Emoji di Database MySQL

  4. MySQL menyalin pengguna

  5. pernyataan pembaruan pdo menggunakan concat tidak berfungsi