উত্তর:
এই ফাংশনটি ব্যবহার করুন:
function user_id_exists($user){
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE ID = %d", $user));
if($count == 1){ return true; }else{ return false; }
}
ব্যবহার:
if(user_id_exists(1)){
//it does exists
} else {
//it doesn't
}
আমি বর্তমানে সঠিক হিসাবে নির্বাচিত একটিটির চেয়ে ড্যানিয়েলের অনেক সহজ সমাধানের জন্য অত্যন্ত সুপারিশ করব :
$user = get_userdata( $user_id );
if ( $user === false ) {
//user id does not exist
} else {
//user id exists
}
$user_ids = array_filter( $user_ids, 'get_userdata' );
এই ক্ষেত্রে আমি কোনও WP_User ফিরিয়ে দেওয়ার সময় get_userdata ($ user_id) সংজ্ঞায়িতভাবে ব্যবহার করব না , সুতরাং এটি কেবল একটি কাস্টম অনুসন্ধানের চেয়ে আরও লোভী ।
কোয়েরি সম্পর্কে, আমি প্রস্তুত পদ্ধতিটি ব্যবহার করে সম্মত, তবে নির্বাচন নির্বাচন (*) এর অর্থ আপনি সমস্ত কলামগুলি ফিরিয়ে দিচ্ছেন যা এখানে অকেজো।
আমি নির্বাচন করুন (আইডি) আনস্টিড ব্যবহার করার পরামর্শ দেব, এইভাবে আমরা কেবলমাত্র একটি একক কলামে কাজ করছি যা দ্রুত হবে।
প্রত্যাবর্তনের বিবৃতিটির অন্য দিকগুলিতে, এটি টার্নারি লজিকের মতো আরও পঠনযোগ্য হবে:
ফিরতি 1 <$ গণনা? সত্য মিথ্যা;
সংক্ষেপে, আমি এটি প্রয়োগ করতাম:
function user_id_exists( $user_id ) {
global $wpdb;
$count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->users WHERE ID = %d", $user_id ) );
return empty( $count ) || 1 > $count ? false : true;
}
SELECT COUNT(*)
এবং SELECT COUNT(ID)
উভয়ই একক কলাম ... একটি গণনা দেয়।
পারফরম্যান্স যদি উদ্বেগজনক হয় তবে ব্যবহার করুন:
function user_id_exists($user_id) {
global $wpdb;
// Check cache:
if (wp_cache_get($user_id, 'users')) return true;
// Check database:
if ($wpdb->get_var($wpdb->prepare("SELECT EXISTS (SELECT 1 FROM $wpdb->users WHERE ID = %d)", $user_id))) return true;
return false;
}
অন্যথায়, ব্যবহার করুন get_userdata($user_id) !== false
। কলটি get_userdata
একক মানের পরিবর্তে ডাটাবেস থেকে পুরো সারিটি পুনরুদ্ধার করবে, একটি নতুন WP_User অবজেক্ট তৈরি করবে এবং সাফল্যে এটি ক্যাশে করবে।
চেষ্টা করুন এটি আপনাকে WPDB এর জন্য আর্গুমেন্ট 2 মিস করার মতো সতর্কতাটি দেখায় না :: প্রস্তুত ()
function user_id_exists($user_id){
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE ID = %d",$user_id));
if($count == 1){ return true; }else{ return false; }
}
return $count == 1;
কমপক্ষে কয়েকজন হ্যাকার দ্বারা করা কিছু (আমি জানি কারণ আমি এটির জন্য কমপক্ষে একবার ভুক্তভোগী হয়েছি) এই জাতীয় URL ব্যবহার করে আপনার সাইটটিতে যেতে হবে
domain.com/?author=0
domain.com/?author=1
প্রভৃতি
একটি সফল প্রয়াসে সাইটের আউটপুটটিতে বৈধ ডেটা থাকবে, এছাড়াও ব্যবহারকারীর ডাকনামটি ওয়েবসাইটের সামগ্রীতে থাকবে এবং ডাক নামটিও সেখানে থাকতে পারে (পৃষ্ঠাগুলির আউটপুটের উপর নির্ভর করে) depending
একটি অবৈধ প্রয়াসে সাইটটি 404 পৃষ্ঠায় যাবে (বা কোনও পৃষ্ঠাতে যা ঘটতে সেট করা হয়েছে ত্রুটি খুঁজে পাওয়া যায়নি)।
সিআরএল ব্যবহার করে এমন স্ক্রিপ্ট তৈরি করা তুচ্ছ হতে পারে যা তুলনামূলকভাবে স্বল্প পরিমাণে এবং ব্যবহারকারীর নামের একটি তালিকাতে লেখক = 0 থেকে লেখক = 999 পর্যন্ত পরীক্ষা করতে পারে। আমার কোনও সাইটের জন্য হ্যাকারকে এটি করতে হয়েছিল এবং তারপরে জনপ্রিয় পাসওয়ার্ডগুলির অন্য একটি তালিকা ব্যবহার করে প্রতিটি ব্যবহারকারীর সাথে লগইন করার চেষ্টা করেছি।
আপনি যখন প্রথমবার কল্পনা করতে পারেন যে কেউ আপনার সমস্ত ব্যবহারকারী নাম খুব সহজেই খুঁজে পেতে পারে তা দেখতে কিছুটা ভীতিজনক। আমার পক্ষে ভাগ্যবান পাসওয়ার্ড সেদিন সেভ করেছিল, আমি নিশ্চিত যে সবাই এত ভাগ্যবান নয়।
আমি এটি কয়েকটি বড় নাম ওয়েবসাইটের বিরুদ্ধে পরীক্ষা করেছি (যারা এই পোস্টে নামহীন থাকবে) এবং মনে হচ্ছে এটি ঘটতে বাধা দেওয়ার জন্য এখনও কেউ কিছু করতে পারে না। আমি ব্যক্তিগতভাবে মনে করি এটি সুরক্ষা ঝুঁকি যে ওয়ার্ডপ্রেস বন্ধ হওয়া উচিত।
সম্পাদনা :
ভবিষ্যতে এখানে (২০১ early সালের শুরুর দিকে) আমি এখন জানি যে এমন কোনও পদ্ধতি / প্লাগইন রয়েছে যা এই ব্যবহারকারীর গণনা আক্রমণকে ব্যর্থ করতে পারে। এবং আমি এর সুরক্ষা ঝুঁকির বিষয়ে আমার অবস্থানটি আরও পরিবর্তন করেছি এবং আমি আর মনে করি না যে ওয়ার্ডপ্রেস এটি পরিবর্তন করা উচিত।
$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists