답변:
Drupal이 익명 사용자를 위해 설치 될 때 해당 항목을 작성하는 것은 정상입니다. 다음 코드가 포함 된 user_install () (Drupal 7) 또는 system_install () 에서 수행됩니다.
// 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'", '');
이 항목은 일반적으로 "node"테이블에 포함 된 데이터를 "users"테이블에 포함 된 데이터와 결합 할 때 사용됩니다.
해당 항목이 없으면 Drupal이 일부 상황에서 올바르게 작동하지 않을 수 있습니다.
데이터베이스에서 익명 사용자 데이터를 복원해야하는 경우 Drupal에서 실행 된 것과 유사한 코드를 실행합니다. 특히 Drupal 6의 경우 다음 코드를 실행합니다.
익명 사용자의 데이터가 이미 데이터베이스에 존재하지만 사용자 ID가 0이 아닌 경우 :
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');잘못된 사용자 ID로도 익명 사용자의 데이터가 존재하지 않는 경우 :
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
익명 사용자 데이터를 자동으로 복원하려면 사용자 hook_cron()정의 모듈에서 구현 하고 다음과 유사한 코드를 실행할 수 있습니다. (코드는 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'", '');
}
모듈에 더 적은 가중치를 부여 hook_cron()하면 다른 구현 전에 해당 구현 이 실행되며 데이터베이스에서 행이 누락되어 실패하지 않습니다.
INSERT INTO users (uid, name, mail) VALUES(0, '', '')