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

Perl:Perbarui Beberapa Baris dengan satu Panggilan MySQL

Pertama dan paling penting, Anda sama sekali tidak boleh menginterpolasi variabel langsung ke string SQL Anda. Itu membuka kemungkinan serangan injeksi SQL. Bahkan jika variabel tersebut tidak berasal dari masukan pengguna, kemungkinan bug berbahaya yang dapat mengacaukan data Anda tetap terbuka.

Driver MySQL DBD mendukung banyak pernyataan, meskipun dimatikan secara default sebagai fitur keamanan. Lihat mysql_multi_statements di bawah Metode Kelas bagian dalam DBD::dokumentasi mysql.

Namun solusi yang jauh lebih baik, yang memecahkan kedua masalah sekaligus dan lebih portabel, adalah dengan menggunakan pernyataan dan nilai placeholder yang telah disiapkan.

my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");

Kemudian, dapatkan data Anda dalam semacam lingkaran:

while( $whatever) { 
    my ( $EC, $MR, $EM ) = get_the_data();
    $sth->execute( $EC, $MR, $EM );
}

Anda hanya perlu menyiapkan pernyataan satu kali, dan nilai placeholder diganti (dan dijamin dikutip dengan benar) oleh driver DBD.

Baca selengkapnya tentang placeholder di dokumen DBI .



  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 UPDATE lebih cepat daripada INSERT INTO?

  2. Bagaimana Fungsi CHARACTER_LENGTH() Bekerja di MySQL

  3. Apakah ada alasan MySQL tidak mendukung FULL OUTER JOINS?

  4. Menekan pesan peringatan menggunakan mysql dari dalam Terminal, tetapi kata sandi ditulis dalam skrip bash

  5. Apakah utas Konektor MySQL/JDBC aman?