टिप्पणियों के आधार पर, ऐसा लगता है कि समस्या require_once()
. का उपयोग करने के कारण हुई है एक समारोह के अंदर।
दो में से एक बात हो रही है। या तो:
-
आप पहले ही
Connection.php
. शामिल कर चुके हैं कहीं और, इसलिए जब आप समारोह में पहुंचते हैं, तो यह वास्तव में शामिल नहीं होता है.. क्योंकि एक बारrequire_once
. का हिस्सा ।या...
-
यह है पहली बार जब आप फ़ंक्शन को कॉल करते हैं, लेकिन दूसरी बार जब आप इसे कॉल करते हैं, तो फ़ाइल पहले ही शामिल हो चुकी होती है और फिर से शामिल नहीं होती है।
समस्या यह है कि जब फ़ाइल को पहली बार शामिल किया जाता है (यह मानते हुए कि यह इस फ़ंक्शन के भीतर से है), $connection
वेरिएबल फंक्शन स्कोप में बनाया जाता है, और किसी भी अन्य फंक्शन वेरिएबल की तरह, फंक्शन के अंत में चला जाता है। जब आप फ़ंक्शन को दूसरी बार कॉल करते हैं, तो शामिल नहीं होता है क्योंकि आप require_once
का उपयोग कर रहे हैं ।
आप शायद require()
. पर कॉल करके इसे ठीक कर सकते हैं require_once()
. के बजाय , लेकिन जब भी आप फ़ंक्शन को कॉल करते हैं तो यह डेटाबेस से फिर से कनेक्ट हो जाएगा - जो कि बहुत अधिक अनावश्यक ओवरहेड है। केवल फ़ंक्शन के बाहर शामिल करना, और या तो फ़ंक्शन में कनेक्शन पास करना, या इसे वैश्विक चर के रूप में उपयोग करना बहुत साफ है।
यह इस तरह दिखेगा:
require_once('Connection.php');
function getResult() {
global $connection;
$findQuery = "SELECT * FROM `Keys` WHERE `ID` = '$gID'";
$findResult = mysql_query($findQuery, $connection) or die(mysql_error());
$resultRow = mysql_fetch_assoc($findResult) or die(mysql_error());
}
इतना ही कहा जा रहा है, इस कोड के साथ 2 प्रमुख समस्याएं हैं।
-
आप
mysql_*
. का उपयोग कर रहे हैं फ़ंक्शंस जो बहिष्कृत हैं और जल्द ही PHP के नए संस्करणों से हटा दिए जाएंगे। अधिक विवरण के लिए यह प्रश्न देखें:क्या मैं PHP में mysql_* फ़ंक्शन का उपयोग नहीं करता?mysqli_*
. जैसी किसी चीज़ पर स्विच करना वास्तव में इतना कठिन नहीं है इसके बजाय फ़ंक्शन - फ़ंक्शन का एक गैर-ऑब्जेक्ट सेट है जो लगभग उसी के समान है जो आप अभी उपयोग कर रहे हैं। -
आप अपनी क्वेरी में एक वेरिएबल को शामिल कर रहे हैं बिना ठीक से भाग निकले। कम से कम आपको
mysql_real_escape_string()
calling पर कॉल करना चाहिए (याmysqli_real_escape_string()
), लेकिन एक बेहतर समाधान तैयार बयानों को देखना है। आप यहां तैयार किए गए बयानों के बारे में अधिक जानकारी प्राप्त कर सकते हैं:मैं PHP में SQL इंजेक्शन को कैसे रोक सकता हूँ?