Câu trả lời:
Điều đó là bình thường, vì Drupal tạo ra mục nhập đó khi nó được cài đặt, cho người dùng ẩn danh. Điều đó được thực hiện từ user_install () (Drupal 7) hoặc system_install () , chứa mã sau đây.
// 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'", '');
Mục nhập đó thường được sử dụng khi nối dữ liệu chứa trong bảng "nút" với dữ liệu chứa trong bảng "người dùng".
Không có mục đó sẽ khiến Drupal không hoạt động chính xác trong một số trường hợp.
Nếu bạn cần khôi phục dữ liệu người dùng ẩn danh trong cơ sở dữ liệu, tôi sẽ thực thi mã tương tự như mã được thực thi từ Drupal. Đặc biệt, đối với Drupal 6, tôi sẽ thực thi đoạn mã sau.
Nếu dữ liệu cho người dùng ẩn danh đã tồn tại trong cơ sở dữ liệu, nhưng ID người dùng không phải là 0:
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Nếu dữ liệu cho người dùng ẩn danh không tồn tại, ngay cả với ID người dùng sai:
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Nếu bạn muốn tự động khôi phục dữ liệu người dùng ẩn danh, bạn có thể triển khai hook_cron()
trong một mô-đun tùy chỉnh và thực thi mã tương tự như sau. (Mã này dành cho 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'", '');
}
Nếu bạn cung cấp cho mô-đun trọng lượng thấp hơn, việc triển khai mô-đun hook_cron()
sẽ được thực hiện trước các triển khai khác và điều này sẽ tránh được việc chúng sẽ thất bại vì hàng bị thiếu trong cơ sở dữ liệu.
INSERT INTO users (uid, name, mail) VALUES(0, '', '')