Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

चेतावनी:mysql_query ():आपूर्ति किया गया तर्क मान्य MySQL-Link संसाधन नहीं है

टिप्पणियों के आधार पर, ऐसा लगता है कि समस्या require_once() . का उपयोग करने के कारण हुई है एक समारोह के अंदर।

दो में से एक बात हो रही है। या तो:

  1. आप पहले ही Connection.php . शामिल कर चुके हैं कहीं और, इसलिए जब आप समारोह में पहुंचते हैं, तो यह वास्तव में शामिल नहीं होता है.. क्योंकि एक बार require_once . का हिस्सा ।

    या...

  2. यह है पहली बार जब आप फ़ंक्शन को कॉल करते हैं, लेकिन दूसरी बार जब आप इसे कॉल करते हैं, तो फ़ाइल पहले ही शामिल हो चुकी होती है और फिर से शामिल नहीं होती है।

समस्या यह है कि जब फ़ाइल को पहली बार शामिल किया जाता है (यह मानते हुए कि यह इस फ़ंक्शन के भीतर से है), $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 प्रमुख समस्याएं हैं।

  1. आप mysql_* . का उपयोग कर रहे हैं फ़ंक्शंस जो बहिष्कृत हैं और जल्द ही PHP के नए संस्करणों से हटा दिए जाएंगे। अधिक विवरण के लिए यह प्रश्न देखें:क्या मैं PHP में mysql_* फ़ंक्शन का उपयोग नहीं करता?

    mysqli_* . जैसी किसी चीज़ पर स्विच करना वास्तव में इतना कठिन नहीं है इसके बजाय फ़ंक्शन - फ़ंक्शन का एक गैर-ऑब्जेक्ट सेट है जो लगभग उसी के समान है जो आप अभी उपयोग कर रहे हैं।

  2. आप अपनी क्वेरी में एक वेरिएबल को शामिल कर रहे हैं बिना ठीक से भाग निकले। कम से कम आपको mysql_real_escape_string() calling पर कॉल करना चाहिए (या mysqli_real_escape_string() ), लेकिन एक बेहतर समाधान तैयार बयानों को देखना है। आप यहां तैयार किए गए बयानों के बारे में अधिक जानकारी प्राप्त कर सकते हैं:मैं PHP में SQL इंजेक्शन को कैसे रोक सकता हूँ?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 134217728 बाइट्स की अनुमत स्मृति आकार समाप्त हो गया (42 बाइट्स आवंटित करने का प्रयास किया गया)

  2. OSX ld:-lssl . के लिए लाइब्रेरी नहीं मिली

  3. यदि मौजूद नहीं है तो PHP mysql डेटाबेस बनाएं

  4. ZF2 में Zend\Db लेनदेन को कैसे नियंत्रित करता है?

  5. MySQL में रूट यूजर के रूप में कैसे सेटअप और लॉगिन करें