Jawaban:
Itu normal, karena Drupal membuat entri itu ketika diinstal, untuk pengguna anonim. Itu dilakukan dari user_install () (Drupal 7), atau system_install () , yang berisi kode berikut.
// Drupal 7.
// Insert a row for the anonymous user.
db_insert('users')
->fields(array(
'uid' => 0,
'name' => '',
'mail' => '',
))
->execute();
// Drupal 6.
// Inserting uid 0 here confuses MySQL -- the next user might be created as
// uid 2 which is not what we want. So we insert the first user here, the
// anonymous user. uid is 1 here for now, but very soon it will be changed
// to 0.
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
// …
// This sets the above two users uid 0 (anonymous). We avoid an explicit 0
// otherwise MySQL might insert the next auto_increment value.
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Entri itu biasanya digunakan ketika bergabung dengan data yang terkandung dalam tabel "simpul" dengan data yang terkandung dalam tabel "pengguna".
Tidak memiliki entri itu akan menyebabkan Drupal tidak berfungsi dengan benar dalam beberapa keadaan.
Jika Anda perlu mengembalikan data pengguna anonim dalam database, saya akan mengeksekusi kode yang mirip dengan yang dieksekusi dari Drupal. Khususnya, untuk Drupal 6, saya akan menjalankan kode berikut.
Jika data untuk pengguna anonim sudah ada dalam database, tetapi ID pengguna tidak 0:
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Jika data untuk pengguna anonim tidak ada, bahkan dengan ID pengguna yang salah:
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Jika Anda ingin secara otomatis mengembalikan data pengguna anonim, Anda bisa menerapkan hook_cron()
dalam modul khusus, dan mengeksekusi kode yang mirip dengan yang berikut ini. (Kode untuk Drupal 6.)
function mymodule_cron() {
$uid = db_result(db_query("SELECT uid FROM {users} WHERE name = '%s'", ''));
if ($uid === FALSE) {
// The data has not been found in the database; re-create the row.
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
}
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
}
Jika Anda memberi bobot yang lebih rendah pada modul, implementasinya hook_cron()
akan dieksekusi sebelum implementasi lainnya, dan ini akan menghindari mereka akan gagal karena baris yang hilang dalam database.
INSERT INTO users (uid, name, mail) VALUES(0, '', '')