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

Bisakah saya membuat parameter nama tabel dalam pernyataan yang disiapkan?

Jawaban singkat untuk pertanyaan Anda adalah "tidak".

Dalam arti yang paling ketat, pada tingkat database, pernyataan yang disiapkan hanya mengizinkan parameter untuk terikat pada bit "nilai" dari pernyataan SQL.

Salah satu cara berpikir ini adalah "hal-hal yang dapat diganti pada saat eksekusi pernyataan tanpa mengubah artinya". Nama tabel bukan salah satu dari nilai runtime tersebut, karena menentukan validitas pernyataan SQL itu sendiri (yaitu, nama kolom apa yang valid) dan mengubahnya pada waktu eksekusi berpotensi mengubah apakah pernyataan SQL valid.

Pada tingkat yang sedikit lebih tinggi, bahkan dalam antarmuka database yang meniru substitusi parameter pernyataan yang disiapkan daripada benar-benar mengirim pernyataan yang disiapkan ke database, seperti PDO, yang memungkinkan Anda untuk menggunakan placeholder di mana saja (karena placeholder diganti sebelum dikirim ke database di sistem tersebut), nilai placeholder tabel akan menjadi string, dan diapit seperti itu di dalam SQL yang dikirim ke database, jadi SELECT * FROM ? dengan mytable karena param pada akhirnya akan mengirim SELECT * FROM 'mytable' ke database, yang merupakan SQL yang tidak valid.

Taruhan terbaik Anda adalah melanjutkan dengan

SELECT * FROM {$mytable}

tapi Anda benar-benar harus memiliki daftar putih tabel yang Anda periksa terlebih dahulu jika $mytable itu berasal dari masukan pengguna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. KESALAHAN 1452:Tidak dapat menambah atau memperbarui baris anak:batasan kunci asing gagal

  2. Cara Menginstal MySQL dengan phpMyAdmin di Ubuntu 12.04

  3. Buat Tabel di MySQL

  4. Docker:Menggabungkan beberapa gambar

  5. Cara Menggunakan STRCMP() untuk Membandingkan 2 String di MySQL