ব্যবহারকারীদের টেবিলে 0 (শূন্য) uid সহ ব্যবহারকারী খুঁজে পেয়েছেন ... হাহ?


9

ব্যবহারকারীর টেবিলে 0 টি uid সহ কোনও ব্যবহারকারী থাকা কি স্বাভাবিক?

উত্তর:


17

এটি স্বাভাবিক, যেমন অজ্ঞাতনামা ব্যবহারকারীর জন্য এটি ইনস্টল করা অবস্থায় দ্রুপাল সেই প্রবেশটি তৈরি করে। যে থেকে সম্পন্ন করা হয় 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'", '');  

"ব্যবহারকারী" সারণীতে থাকা ডেটা সহ "নোড" টেবিলের অন্তর্ভুক্ত ডেটাতে যোগদান করার সময় সেই প্রবেশটি সাধারণত ব্যবহৃত হয়।

এন্ট্রি না থাকায় দ্রুপাল কিছু পরিস্থিতিতে সঠিকভাবে কাজ না করতে পারে।

আপনার যদি ডাটাবেসে বেনামে ব্যবহারকারীর ডেটা পুনরুদ্ধার করতে হয় তবে আমি ড্রুপাল থেকে মৃত্যুদন্ড কার্যকর করা কোডের মতো কোডটি কার্যকর করব। বিশেষত, ড্রুপাল 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()একটি কাস্টম মডিউল প্রয়োগ করতে এবং নীচের মত কোড প্রয়োগ করতে পারেন। (কোডটি দ্রুপাল for এর জন্য)

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()অন্যান্য বাস্তবায়নের আগেই কার্যকর করা হবে এবং এটি এড়াতে পারে কারণ ডাটাবেসটিতে সারি অনুপস্থিত রয়েছে।


আমি এই মোচড়ের জন্য প্রস্তুত ছিলাম না ...: | কয়েক ঘন্টা ধরে কেন কিছু পোস্ট রয়েছে তা ভেবে বসে ছিল (আমি ভেবেছিলাম এটি প্রথমে আমার ডাম্পগুলিতে একটি বাগ ছিল এবং কেবল এটি সরানো হয়েছে: ও)। কী অবস্থা? কোন রিসোর্স?
জয়য়ারজো

আমি আমার উত্তর প্রসারিত। নোডের লেখকদের সম্পর্কে ডেটা পাওয়ার সময় এটি সাধারণত ব্যবহৃত হয়।
কিমলালুনো

1
ক্রোন এবং অন্যান্য দৃষ্টান্তগুলি চলাকালীন এটি কদর্য সতর্কতার দিকেও যায়। সুতরাং আপনার অবশ্যই সেই সারিটি পুনরায় যুক্ত করা উচিত।
বারদির

3
আপনার যদি বেনামে ব্যবহারকারীর পুনরুদ্ধার করতে চান তবে ডাটাবেসে এই এসকিউএল চালানো যথেষ্ট হবে:INSERT INTO users (uid, name, mail) VALUES(0, '', '')
মার্চওয়ানগ্র্যান্ড

আমি এটি কোনও ধরণের হ্যাক বলে অনুভব করেছি, এজন্যই আমি এটিকে অদ্ভুত বলে মনে করেছি এবং এটিকে সরিয়ে দিয়েছি। আমি এখন এমআইএসকিউএল 40 সামঞ্জস্যতা মোডে (কিছু বোবা শেয়ার্ড হোস্টিং সার্ভার) আমার ডাটাবেস রফতানি করছিলাম বলে আমি এর প্রমাণ পেয়েছি, এটি পরবর্তী অটো-ইনক্রিমেন্ট মান (7) হিসাবে আমদানি হয়ে গেছে। যদি আমি দুর্ঘটনাক্রমে এই
জিনিসটিকে হোঁচট

2

ডিফল্টরূপে বেনামে ব্যবহারকারীর সংখ্যা 0 হয় এবং এটি ড্রপাল ইনস্টল করার সময় ব্যবহারকারীদের টেবিলে উপস্থিত প্রথম ব্যবহারকারী এবং অ্যাডমিন আইডি 1 হবে এবং ব্যবহারকারী সারণিতে তিনি দ্বিতীয় ব্যবহারকারী হবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.