Jawaban:
Gunakan fungsi ini:
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; }
}
Pemakaian:
if(user_id_exists(1)){
//it does exists
} else {
//it doesn't
}
Saya akan sangat merekomendasikan solusi Daniel yang jauh lebih sederhana daripada yang saat ini dipilih sebagai benar:
$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' );
Dalam hal ini saya pasti tidak akan menggunakan get_userdata ($ user_id) ketika sedang mengembalikan WP_User, jadi ini lebih serakah daripada sekadar permintaan khusus.
Tentang kueri, saya setuju menggunakan metode persiapan, tetapi SELECT COUNT (*) berarti Anda mengembalikan semua kolom , yang tidak berguna di sini.
Saya akan merekomendasikan menggunakan SELECT COUNT (ID) goyah, dengan cara ini kami hanya bekerja pada satu kolom yang akan lebih cepat.
Pada aspek lain untuk pernyataan kembali, itu akan lebih mudah dibaca dengan Logika Ternary seperti:
kembalikan 1 <$ hitung? benar salah;
Singkatnya, saya akan mengimplementasikannya seperti:
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(*)
dan SELECT COUNT(ID)
keduanya mengembalikan satu kolom ... hitungan.
Jika kinerja menjadi masalah, gunakan:
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;
}
Kalau tidak, gunakan get_userdata($user_id) !== false
. Panggilan untuk get_userdata
akan mengambil seluruh baris dari basis data alih-alih nilai tunggal, membuat objek WP_User baru dan menyimpannya dengan sukses.
Coba Ini tidak akan Menampilkan Anda peringatan seperti Hilang argumen 2 untuk wpdb :: prep ()
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;
Sesuatu yang dilakukan oleh setidaknya beberapa peretas (saya tahu karena saya bermain sebagai korban ini setidaknya sekali) adalah mengunjungi situs Anda menggunakan jenis URL ini
domain.com/?author=0
domain.com/?author=1
dll.
Pada upaya yang berhasil, output situs akan memiliki data yang valid, selain itu nama pengguna pengguna akan ada di konten situs web dan nama julukannya mungkin ada di sana (tergantung pada output halaman).
Pada upaya yang tidak valid, situs akan menuju ke halaman 404 (atau apa pun yang diatur terjadi pada halaman yang tidak ditemukan kesalahan).
Ini mungkin agak sepele untuk membangun skrip menggunakan CURL yang dapat menguji dari katakanlah penulis = 0 hingga penulis = 999 dalam jumlah waktu yang relatif singkat dan menghasilkan daftar nama pengguna. Saya menyuruh seorang peretas melakukan ini untuk salah satu situs saya dan kemudian mencoba masuk ke setiap pengguna dengan menggunakan daftar kata sandi populer lainnya.
Seperti yang dapat Anda bayangkan saat pertama kali ini terjadi, agak menakutkan untuk melihat bahwa seseorang dapat dengan mudah mengetahui semua nama pengguna Anda. Beruntung bagi saya kata sandi yang kuat disimpan pada hari itu, saya yakin tidak semua orang sangat beruntung.
Saya telah menguji ini terhadap beberapa situs web dengan nama besar (yang akan tetap tidak disebutkan namanya dalam posting ini) dan tampaknya mungkin tidak ada yang bisa dilakukan oleh siapa pun untuk menghentikan hal ini terjadi. Saya pribadi berpikir itu adalah risiko keamanan yang harus ditutup oleh wordpress.
EDIT :
Di sini di masa depan (awal 2016) saya sekarang tahu bahwa ada metode / plugin yang dapat menggagalkan serangan penghitungan pengguna ini. Dan saya selanjutnya telah mengubah sikap saya tentang risiko keamanan ini dan saya tidak lagi berpikir WordPress harus mengubah ini.
$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists