निम्न कोड केवल एक स्ट्रिंग चर घोषित करता है जिसमें एक MySQL क्वेरी है:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
यह क्वेरी निष्पादित नहीं करता है। ऐसा करने के लिए आपको कुछ फ़ंक्शन का उपयोग करने की आवश्यकता है, लेकिन मुझे पहले कुछ और समझाएं।
उपयोगकर्ता इनपुट पर कभी विश्वास न करें :आपको कभी भी उपयोगकर्ता इनपुट नहीं जोड़ना चाहिए (जैसे कि $_GET
. से फ़ॉर्म इनपुट या $_POST
) सीधे आपकी क्वेरी के लिए। कोई व्यक्ति इनपुट में इस तरह से सावधानी से हेरफेर कर सकता है कि यह आपके डेटाबेस को बहुत नुकसान पहुंचा सकता है। इसे SQL इंजेक्शन कहा जाता है। आप इसके बारे में अधिक पढ़ सकते हैं यहां
अपनी स्क्रिप्ट को इस तरह के हमले से बचाने के लिए आपको जरूरी तैयार बयानों का उपयोग करें। तैयार किए गए कथनों पर अधिक यहां
अपने कोड में इस तरह तैयार कथन शामिल करें:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
ध्यान दें कि कैसे ?
मूल्यों के लिए प्लेसहोल्डर के रूप में उपयोग किया जाता है। इसके बाद आपको mysqli_prepare
. का उपयोग करके स्टेटमेंट तैयार करना चाहिए :
$stmt = $mysqli->prepare($sql);
फिर इनपुट वेरिएबल्स को तैयार स्टेटमेंट में बाँधना शुरू करें:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
और अंत में तैयार बयानों को निष्पादित करें। (यह वह जगह है जहां वास्तविक प्रविष्टि होती है)
$stmt->execute();
नोट हालांकि इस सवाल का हिस्सा नहीं है, मैं आपको दृढ़ता से सलाह देता हूं कि पासवर्ड को कभी भी स्पष्ट टेक्स्ट में स्टोर न करें। इसके बजाय आपको password_hash
. का उपयोग करना चाहिए पासवर्ड का हैश स्टोर करने के लिए