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

Menangani data dari beberapa bidang pilihan

Pertama dan terpenting:

Menjadi lebih penting dari sebelumnya bahwa Anda mengikuti saran ini, ext/MySQL sekarang telah ditinggalkan dan menggunakannya akan memancarkan E_DEPRECATED kesalahan dimulai dengan PHP 5.5, suatu hari akan benar-benar dihapus dari bahasa inti. Karena itu, berikut ini berlaku untuk semua driver untuk semua database.

Untuk penjelasan selanjutnya, saya akan berasumsi bahwa Anda tidak dapat menggunakan MySQLi atau PDO karena alasan tertentu (perhatikan bahwa hanya alasan yang memuaskan di sini adalah bahwa mereka tidak tersedia, "Saya tidak tahu cara menggunakannya" bukan alasan) dan bahwa Anda terpaksa menggunakan ext/MySQL. Jika Anda dapat menggunakan salah satu driver yang lebih baru, maka Anda dapat menggunakan pernyataan yang telah disiapkan, dan semua ini tidak berlaku. Jadi, dengan mengingat hal itu...

Selanjutnya mari kita lihat apa yang salah dengan jawaban sebelumnya. Ini berpusat di sekitar menghindari input pengguna. Ini menggunakan mysql_real_escape_string() adalah cara yang benar-benar tidak masuk akal sama sekali. Ini harus digunakan untuk keluar dari string literal tunggal, dan sama sekali tidak ada yang lain, selamanya. Itu tidak dapat digunakan untuk menghindari angka secara efektif, dan tidak dapat digunakan untuk lolos dari bagian SQL yang bukan hanya nilai.

Dua cuplikan kode berikut menunjukkan cara yang benar untuk melakukannya, bergantung pada apa data itu dan, yang terpenting, jenisnya.

Inilah yang akan kita lakukan jika nilainya berupa string (biasanya CHAR atau VARCHAR bidang):

// First create an array of individually escaped values with quotes added
$deds = array();
foreach ($_POST['deductions'] as $ded) {
  $deds[] = "'".mysql_real_escape_string($ded)."'";
}

// Now join them together in an SQL syntax
$deds_joined = join('), (', $deds);

// Now they can safely be used in the query
$query = "INSERT INTO mytable (deduction) VALUES ($deds_joined)";

Tetapi sering kali dalam skenario ini, nilainya hanya berupa angka, dan dalam hal ini yang perlu kita lakukan adalah memastikan bahwa PHP merepresentasikannya dengan tipe data yang benar, karena nilai tersebut akan aman secara otomatis saat diubah kembali menjadi string. digunakan dalam kueri:

// First convert the array values to integers
$deds = array();
foreach ($_POST['deductions'] as $ded) {
  $deds[] = (int) $ded;
}

// Now join them together in an SQL syntax
$deds_joined = join('), (', $deds);

// Now they can safely be used in the query
$query = "INSERT INTO mytable (deduction) VALUES ($deds_joined)";

Kode ini jelas mengasumsikan bahwa data bertipe integer, float dapat dengan mudah ditangani hanya dengan mengubah (int) dilemparkan ke (float) .

Perlu juga dicatat bahwa pendekatan string dapat dengan aman dan berhasil digunakan untuk nilai numerik juga, karena MySQL juga akan mengonversi nilai ke tipe yang benar. Tetapi secara umum lebih baik dan lebih efisien untuk meneruskan data dengan representasi tipe yang benar dalam kueri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gabungkan dua tabel dalam satu kueri SQL dan buat nilai tanggal menjadi unik

  2. Cara Menemukan Kumpulan yang Didukung oleh Server di MySQL

  3. MySQL:Kelompokkan menurut dua kolom dan jumlahkan

  4. Gabung kiri kondisi ON DAN sintaks kondisi lain dalam Doktrin

  5. Filter menurut COUNT(*)?