Відповіді:
Це нормально, оскільки 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'", '');
Цей запис зазвичай використовується при з'єднанні даних, що містяться в таблиці "вузол", до даних, що містяться в таблиці "користувачі".
Якщо цей запис не матиме, це призведе до того, що Drupal не працює належним чином за певних обставин.
Якщо вам потрібно відновити дані анонімних користувачів у базі даних, я б виконав код, аналогічний тому, який виконується з Drupal. Зокрема, для Drupal 6 я би виконував наступний код.
Якщо дані для анонімних користувачів вже є в базі даних, але ідентифікатор користувача не дорівнює 0:
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');Якщо даних для анонімного користувача не існує, навіть із неправильним ідентифікатором користувача:
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, '', '')