Yanıtlar:
Anonim kullanıcı için Drupal kurulduğunda bu girişi oluşturması normaldir. Bu yapıldığında user_install () (Drupal 7) veya system_install () aşağıdaki kodu içerebilir.
// 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'", '');
Bu girdi normalde "düğüm" tablosundaki verileri "kullanıcılar" tablosundaki verilerle birleştirirken kullanılır.
Bu girişe sahip olmama, Drupal'ın bazı durumlarda düzgün çalışmamasına neden olur.
Veritabanındaki anonim kullanıcı verilerini geri yüklemeniz gerekirse, Drupal'dan çalıştırılana benzer bir kod yürütürüm. Özellikle, Drupal 6 için, aşağıdaki kodu yürütürdüm.
Anonim kullanıcıların verileri veritabanında zaten varsa, ancak kullanıcı kimliği 0 değilse:
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Anonim kullanıcının verileri yanlış kullanıcı kimliğiyle olsa bile yoksa:
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Anonim kullanıcı verilerini otomatik olarak geri yüklemek isterseniz, hook_cron()
özel bir modüle uygulayabilir ve aşağıdakine benzer bir kod yürütebilirsiniz. (Kod Drupal 6 içindir.)
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'", '');
}
Modüle daha düşük bir ağırlık verirseniz, uygulaması hook_cron()
diğer uygulamalardan önce yürütülür ve bu, veritabanındaki eksik satır nedeniyle başarısız olur.
INSERT INTO users (uid, name, mail) VALUES(0, '', '')