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

Memahami Pernyataan dan Parameter Pengikatan yang Disiapkan PDO

Anda benar bahwa kasus pertama tidak aman. Penting untuk dipahami, bahwa menyiapkan pernyataan hanya memiliki nilai jika Anda menggunakan data variabel, dan/atau mengeksekusi kueri yang sama berulang kali. Jika Anda menjalankan pernyataan biasa tanpa variabel , Anda cukup melakukan ini:

$sql = "SELECT * from myTable WHERE this_column IS NOT NULL";
$result = $conn->query($sql);

Dan diakhiri dengan PDOStatement objek untuk dikerjakan, sama seperti saat Anda menggunakan PDO::exec() .

Untuk kasus kedua Anda, sekali lagi, Anda sebagian besar benar. Apa yang terjadi adalah variabel yang diteruskan ke database diloloskan dan dikutip (kecuali jika Anda menentukan sebaliknya dengan argumen ketiga ke PDOStatement::bindParam() , itu dikirim sebagai string yang baik untuk sebagian besar kasus.) Jadi, kueri tidak akan "gagal" jika data buruk dikirim. Ini berperilaku persis seperti jika Anda telah melewati nomor yang valid yang tidak ada sebagai ID dalam database. Tentu saja ada beberapa kasus tepi di mana Anda masih rentan bahkan dengan pernyataan yang disiapkan dengan benar.

Selain itu, untuk membuat hidup lebih mudah, Anda dapat menggunakan pernyataan yang disiapkan seperti ini, untuk melakukan pengikatan implisit:

$sql = "SELECT * FROM myTable WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->execute([":id"=>$id]);

Atau bahkan seperti ini, dengan parameter tanpa nama:

$sql = "SELECT * FROM myTable WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->execute([$id]);

Secara alami, sebagian besar telah dijelaskan di komentar saat saya mengetik jawabannya!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah MySQL mendukung pewarisan tabel?

  2. Bagaimana saya bisa MEMILIH baris dengan MAX (Nilai kolom), PARTISI dengan kolom lain di MYSQL?

  3. MySqlConnectionStringBuilder - Terhubung dengan Sertifikat

  4. Variabel MySql dan php

  5. Jenis segitiga di MySQL