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

Perbarui kolom jika nilai input bukan nol jika tidak, abaikan dan pertahankan nilai kolom yang ada di database

Anda memasukkan nama pengguna langsung ke SQL tanpa keluar atau bahkan mengutip. Saya pikir Anda hanya melewatkan apostrof.

Untuk mencegah masalah injeksi SQL, JANGAN PERNAH menyisipkan konstanta string SQL dari data dinamis, SELALU gunakan PreparedStatement dan sisipkan spidol.

Atau, keluar dari nilai, tetapi menggunakan penanda jauh lebih aman, dan meningkatkan kinerja SQL dengan mengizinkan database untuk menyimpan pernyataan SQL yang dikompilasi ke cache.

String updateQuery = "UPDATE " + USER_TABLE +
                       " SET " + USER_TABLE_FIRST_NAME + "=IFNULL(? ," + USER_TABLE_FIRST_NAME + ")," +
                                 USER_TABLE_LAST_NAME + "=?," +
                                 USER_TABLE_ABOUT_ME + "=?," +
                                 USER_TABLE_CITY + "=?," +
                                 USER_TABLE_DOB + "=?" +
                     " WHERE " + USER_TABLE_ID + "=?";
PreparedStatement stmt = conn.prepareStatement(updateQuery);
stmt.setString(1, user.getFirstName());
stmt.setString(2, user.getLastName());
stmt.setString(3, user.getAboutMe());
stmt.setString(4, user.getCity());
stmt.setString(5, user.getDateOfBirth());
stmt.setString(6, user.getUserId());

Catatan: Jawaban diperluas untuk mencakup masalah cek nol.

Saat Anda menggunakan injeksi string sederhana, "A='" + name + "'" menjadi A='Joe' untuk nilai bukan nol tetapi A='null' untuk nilai nol, yang jelas bukan yang Anda inginkan.

Dengan menggunakan penanda parameter, nilai ? bisa null , yang artinya IFNULL(?, Name) akan memberikan perilaku yang tepat yang dibutuhkan, yaitu menggunakan nilai ? bila bukan nol, dan nilai NAME kapan ? adalah nol.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lokasi tabel database - MySQL - Windows XP

  2. Hapus tag HTML dari catatan

  3. Kesalahan sintaks:WITH bukan input yang valid di posisi ini

  4. Bandingkan baris dalam tabel yang sama di mysql

  5. pemilihan cepat baris acak dari tabel besar di mysql