$sql = 'INSERT INTO users (user_email, user_name, user_pref, user_password)
VALUES(?, ?, ?, des_encrypt(substring(md5(rand()),1,8)))';
केवल 3 प्लेसहोल्डर को परिभाषित करता है लेकिन आप 4 को लिखने का प्रयास करते हैं।
$stmt->bind_param('ssss', $_POST['user_email'], $_POST['user_name'], $_POST['user_pref'], $_POST['user_password']);
हरएक के लिए ? आप तैयार SQL कथन में सम्मिलित करते हैं आपको bind_param में एक चर पास करना होगा।