it-swarm-eu.dev

Našel se uživatel s uidem 0 (nula) v tabulce uživatelů ... co?

Je normální mít u stolu uživatele s uidem 0?

9
jayarjo

Je normální, protože Drupal vytváří tuto položku, když je nainstalována, pro anonymního uživatele. To se provádí z ser_install () (Drupal 7), nebo - system_install () , které obsahují následující kód.

  // 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'", '');  

Tato položka se obvykle používá při spojení dat obsažených v tabulce „uzel“ s daty obsaženými v tabulce „uživatelé“.

Pokud by tato položka nebyla, znamenalo by to, že Drupal za určitých okolností nebude fungovat správně).

Pokud potřebujete obnovit anonymní uživatelská data v databázi, spustil bych kód podobný tomu, který byl proveden z Drupalu. Zejména pro Drupal 6) bych provedl následující kód.

  • Pokud data pro anonymní uživatele již v databázi existují, ale ID uživatele není 0:

    db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
    
  • Pokud data pro anonymního uživatele neexistují, a to i se špatným ID uživatele:

    db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
    db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
    

Pokud chcete automaticky obnovit anonymní uživatelská data, můžete implementovat hook_cron() do vlastního modulu a spustit kód podobný následujícímu. (Kód je pro 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'", '');
}

Pokud modulu dáte nižší váhu, jeho implementace hook_cron() bude provedena před ostatními implementacemi, což by zabránilo jejich selhání, protože chybí řádek v databázi.

17
kiamlaluno

Ve výchozím nastavení je anonymní uživatel 0 a toto je první uživatel přítomný v tabulce uživatelů v době instalace drupal a id admin bude 1 a bude druhým uživatelem v tabulce uživatelů) .

2
Satya