Risposte:
È normale, poiché Drupal crea quella voce quando è installata, per l'utente anonimo. Ciò viene fatto da user_install () (Drupal 7) o system_install () , che contiene il seguente codice.
// 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'", '');
Tale voce viene normalmente utilizzata quando si uniscono i dati contenuti nella tabella "nodo" con i dati contenuti nella tabella "utenti".
Non avere quella voce farebbe sì che Drupal non funzionasse correttamente in alcune circostanze.
Se è necessario ripristinare i dati degli utenti anonimi nel database, eseguirò un codice simile a quello eseguito da Drupal. In particolare, per Drupal 6, esegui il seguente codice.
Se i dati per gli utenti anonimi esistono già nel database, ma l'ID utente non è 0:
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Se i dati per l'utente anonimo non esistono, anche con l'ID utente errato:
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Se si desidera ripristinare automaticamente i dati utente anonimi, è possibile implementare hook_cron()
in un modulo personalizzato ed eseguire codice simile al seguente. (Il codice è per 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'", '');
}
Se si assegna al modulo un peso inferiore, la sua implementazione hook_cron()
verrà eseguita prima delle altre implementazioni e questo eviterebbe che falliscano perché la riga mancante nel database.
INSERT INTO users (uid, name, mail) VALUES(0, '', '')