Saya hanya memperhatikan bahwa @Berdir sangat baik untuk dihapus db_affected_rows
dari Drupal 7 . Saya sekarang bertanya-tanya apa praktik terbaik sekarang untuk mendeteksi jika kueri yang Anda jalankan mengubah apa pun dalam database.
Sebuah usecase khas akan menjadi.
db_query(...);
if (!db_affected_rows()) {
db_query(...);
}
Saya melihat objek permintaan yang dikembalikan dari db_query, tapi sepertinya tidak banyak membantu.
Pembaruan:
Saya melihat saya agak tidak jelas tentang keadaan apa saya membutuhkan info.
Kasus penggunaan saya saat ini, adalah kasus yang cukup sederhana. Saya punya tabel untuk tipe simpul dengan kolom nid dan beberapa kolom data. Saya memiliki formulir saat mengirimkan formulir, saya ingin memasukkan atau memperbarui baris dalam db.
Masalahnya dengan db_update
/ db_insert
adalah bahwa, jika saya menggunakan pembaruan terlebih dahulu, dan menyisipkan jika pembaruan mengembalikan 0, saya tidak akan mengetahui kondisinya, di mana formulir dikirimkan dengan nilai dalam db. Jika saya menggunakan db_insert terlebih dahulu, itu akan meningkatkan en error jika sudah ada baris di db.
Saya kira saya dalam kondisi khusus ini dapat menyisipkan nilai kosong ketika node dibuat dan kemudian hanya menggunakan pembaruan, tetapi untuk beberapa kasus itu mungkin tidak mungkin, jika saya perlu menyimpan info yang dikunci ke database eksternal. Saya juga ingin menghindari ketergantungan pada nilai basis data agar kode saya berfungsi.
Strategi saya yang biasa untuk kasus seperti itu, adalah melakukan a
db_query("INSERT IGNORE INTO ...")
if (!db_affected_rows()) {
db_query("UPDATE ...");
}
Melakukan ini sederhana dan bebas kesalahan, tidak peduli dalam kondisi apa db berada. Opsi terbaik yang dapat saya lihat sekarang, adalah menanganinya dengan SQL dan melakukan ini:
db_query("INSERT ... ON DUPLICATE KEY UPDATE");
Tapi saya berharap bahwa API db akan mampu menangani ini.