Ist es normal, einen Benutzer mit der UID 0 in der Benutzertabelle zu haben?
Es ist normal, dass Drupal diesen Eintrag bei der Installation für den anonymen Benutzer erstellt. Dies erfolgt über user_install () (Drupal 7) oder system_install () , die den folgenden Code enthalten.
// 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'", '');
Dieser Eintrag wird normalerweise verwendet, wenn die in der Tabelle "Knoten" enthaltenen Daten mit den in der Tabelle "Benutzer" enthaltenen Daten verknüpft werden.
Wenn Sie diesen Eintrag nicht haben, funktioniert Drupal unter bestimmten Umständen nicht richtig.
Wenn Sie die anonymen Benutzerdaten in der Datenbank wiederherstellen müssen, würde ich Code ausführen, der dem von Drupal ausgeführten ähnlich ist. Insbesondere für Drupal 6 würde ich den folgenden Code ausführen.
Wenn die Daten für die anonymen Benutzer bereits in der Datenbank vorhanden sind, die Benutzer-ID jedoch nicht 0 ist:
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Wenn die Daten für den anonymen Benutzer auch mit der falschen Benutzer-ID nicht vorhanden sind:
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Wenn Sie die anonymen Benutzerdaten automatisch wiederherstellen möchten, können Sie sie hook_cron()
in einem benutzerdefinierten Modul implementieren und Code ähnlich dem folgenden ausführen. (Der Code ist für 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'", '');
}
Wenn Sie dem Modul eine geringere Gewichtung geben, wird seine Implementierung von hook_cron()
vor den anderen Implementierungen ausgeführt, und dies würde vermeiden, dass sie aufgrund der fehlenden Zeile in der Datenbank fehlschlagen.
INSERT INTO users (uid, name, mail) VALUES(0, '', '')
Standardmäßig ist der anonyme Benutzer 0 und dies ist der erste Benutzer, der zum Zeitpunkt der Installation von drupal in der Benutzertabelle vorhanden ist. Die Administrator-ID ist 1 und er ist der zweite Benutzer in der Benutzertabelle.
quelle