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

Apakah $_SESSION aman dari injeksi sql?

Anda tidak benar-benar harus menguji input berupa numerik, karena di MySQL, string apa pun mis. '123abc' dalam konteks numerik (seperti dibandingkan dengan kolom integer id ) secara implisit hanya mengambil angka dan mengabaikan sisanya. String non-numerik seperti 'abc' hanya memiliki nilai integer 0 karena tidak ada digit depan.

Intinya, nilai aman dari injeksi SQL jika Anda menggunakan parameter kueri. Apakah input berasal dari $_SESSION atau sumber lain tidak relevan. $_SESSION tidak aman atau tidak aman sehubungan dengan injeksi SQL, yang penting adalah bagaimana Anda meneruskan data ke kueri Anda.

Saya juga akan menyederhanakan kode untuk memformat daftar placeholder parameter:

$placeholders = implode(',', array_fill(1, count((array)$_SESSION['story']), '?'));

Dan lupakan bindParam(), cukup berikan array ke execute() .

//Collect all data needed
$storyQuery = openConnection() -> prepare("SELECT * FROM `stories` 
    WHERE `id` IN ({$placeholders})");
$storyQuery -> execute((array)$_SESSION['story']);
$story = $storyQuery -> fetchAll();

Kembali komentar Anda:

Di PDO, Anda dapat menggunakan salah satu parameter bernama seperti :id , atau Anda dapat menggunakan parameter posisi, yang selalu ? (tetapi jangan campur kedua jenis ini dalam kueri tertentu, gunakan salah satu atau yang lain).

Melewati larik ke execute() secara otomatis mengikat elemen array ke parameter. Array sederhana (yaitu diindeks oleh bilangan bulat) mudah untuk mengikat parameter posisi.

Jika Anda menggunakan parameter bernama, Anda harus meneruskan larik asosiatif di mana kunci larik cocok dengan nama parameter. Kunci array opsional dapat diawali dengan : tapi itu tidak wajib.

Jika Anda baru mengenal PDO, ada baiknya membaca dokumentasi . Ada contoh kode dan semuanya!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menambahkan Opsi ke sql_mode di MySQL Tanpa Kehilangan Pengaturan yang Ada

  2. tutorial terbaik untuk menggunakan kerangka entitas, POCO, dan MySQL

  3. Ubah stempel waktu menjadi tanggal dalam kueri MySQL

  4. 10 Pertanyaan Wawancara Database MySQL untuk Pemula dan Menengah

  5. MySQL 5.7 :mengonversi JSON_ARRAY sederhana menjadi baris