उपयोगकर्ता तालिका में यूआईडी (शून्य) के साथ उपयोगकर्ता मिला ... हुह?


9

क्या उपयोगकर्ता तालिका में 0 से uid वाला उपयोगकर्ता होना सामान्य है?

जवाबों:


17

यह सामान्य है, जैसा कि 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 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()को अन्य कार्यान्वयन से पहले निष्पादित किया जाएगा, और इससे वे बचेंगे क्योंकि डेटाबेस में अनुपस्थित पंक्ति।


मैं इस मोड़ के लिए तैयार नहीं था ...: | कुछ घंटों के लिए यह सोचकर बैठा था कि यह क्यों है (मुझे लगा कि यह शुरू में मेरे डंप में एक बग था और बस इसे हटा दिया: ओ)। क्या हालात हैं? उस पर कोई संसाधन?
जयरोजो

मैंने अपने उत्तर का विस्तार किया। यह आमतौर पर नोड्स के लेखकों के बारे में डेटा प्राप्त करते समय उपयोग किया जाता है।
kiamlaluno

1
यह क्रोन और अन्य उदाहरणों को चलाने पर बुरा चेतावनी भी देता है। तो आपको वास्तव में उस पंक्ति को फिर से जोड़ना चाहिए।
बेदिर

3
यदि आपको अनाम उपयोगकर्ता को पुनर्स्थापित करने की आवश्यकता है, तो डेटाबेस पर इस SQL ​​को चलाने के लिए पर्याप्त होना चाहिए:INSERT INTO users (uid, name, mail) VALUES(0, '', '')
marcvangend

मुझे लगा कि यह किसी प्रकार का हैक है, इसलिए मैंने सोचा कि यह अजीब था और इसे हटा दिया। लेकिन अब मुझे इसका एक प्रमाण मिल गया क्योंकि मैं अपने डेटाबेस को MYSQL40 संगतता मोड (कुछ गूंगा साझा होस्टिंग सर्वर) में निर्यात कर रहा था, इसे अगले ऑटो-इंक्रीमेंट वैल्यू (7) के रूप में आयात किया गया। अगर मैंने गलती से इस चीज़ पर ठोकर नहीं खाई थी, तो मुझे कभी नहीं पता चलेगा कि क्या गलत हुआ और अनिश्चित समय के लिए गायब पदों के बारे में सोचा होगा :( सही नहीं ...
जयरजो

2

डिफ़ॉल्ट रूप से अनाम उपयोगकर्ता 0 है और यह ड्रुपल स्थापित करने के समय उपयोगकर्ता तालिका में मौजूद पहला उपयोगकर्ता है और व्यवस्थापक आईडी 1 होगा और वह उपयोगकर्ता तालिका में दूसरा उपयोगकर्ता होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.