mysql_fetch_array() त्रुटि: पैरामीटर 1 resource होना चाहिए - समाधान

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: "आपका लोगो काम नहीं कर रहा, और डेटाबेस रो रहा है"

\n\n

अगर आपने कभी PHP में MySQL के साथ काम करने वाला स्क्रिप्ट लिखा है, तो आपने यह डरावना संदेश ज़रूर देखा होगा:
\nWarning: mysql_fetch_array() expects parameter 1 to be resource, boolean given.

\n\n

चिंता न करें: यह दुनिया का अंत नहीं है। यह सिर्फ PHP का एक संकेत है: "अरे, मैं उस चीज़ से डेटा नहीं ले सकता जो तुमने मुझे दी है!"

\n\n

इस ट्यूटोरियल में हम जानेंगे कि mysql_fetch_array() expects parameter 1 to be resource त्रुटि क्यों होती है, इसे कैसे ठीक करें, और सबसे महत्वपूर्ण बात — इसे हमेशा के लिए कैसे खत्म करें (स्पॉयलर: PDO या MySQLi पर स्विच करें)।

\n\n

यह लेख pythonlib.ru के लिए विशेष रूप से लिखा गया है — एक शैक्षिक पोर्टल जहाँ हम बिना दर्द के कोड लिखना सिखाते हैं। चलिए शुरू करते हैं!

\n\n

PHP क्यों चिल्ला रहा है? (कारण)

\n\n

समस्या की जड़ को समझने के लिए, याद करें कि पुराने mysql_* फंक्शन कैसे काम करते हैं (हाँ, वे जो PHP 5.5 में ही पुराने हो गए थे)।

\n\n

शुरुआती लोगों का विशिष्ट कोड कुछ इस तरह दिखता है:

\n
// कनेक्शन\n$link = mysql_connect('localhost', 'user', 'password');\nmysql_select_db('test');\n\n// क्वेरी (गलती के साथ)\n$result = mysql_query("SELECT * FROM users WHERE id = '1");\n\n// पढ़ने का प्रयास\nwhile($row = mysql_fetch_array($result)) { // त्रुटि!\n    echo $row['name'];\n}
\n\n

यहाँ क्या गलत है? सब कुछ! लेकिन मुख्य बात: mysql_query() ने false लौटाया, न कि resource। क्यों?

\n\n
    \n
  • SQL में सिंटैक्स त्रुटि — कोटेशन बंद नहीं हुआ।
  • \n
  • डेटाबेस से कनेक्शन नहीं — mysql_connect() ने false लौटाया।
  • \n
  • डेटाबेस चयनित नहीं — mysql_select_db() काम नहीं किया।
  • \n
  • टेबल मौजूद नहीं।
  • \n
\n\n

जब mysql_query() विफल होता है, तो वह false (बूलियन टाइप) लौटाता है, न कि resource। आप false को mysql_fetch_array() में भेजने की कोशिश कर रहे हैं, जो resource की उम्मीद करता है। यही संघर्ष है! इसलिए त्रुटि आती है।

\n\n

कौन से फंक्शन प्रभावित होते हैं?

\n
    \n
  • mysql_fetch_array()
  • \n
  • mysql_fetch_assoc()
  • \n
  • mysql_fetch_row()
  • \n
  • mysql_num_rows()
  • \n
  • mysql_data_seek()
  • \n
\n\n

ये सभी एक ही बात कहते हैं: "expects parameter 1 to be resource"।

\n\n

चरण-दर-चरण समाधान (पुराने कोड के लिए)

\n\n

अगर आपके पास लीगेसी प्रोजेक्ट है और आप अभी PHP अपडेट नहीं कर सकते (हालाँकि मैं दृढ़ता से सलाह देता हूँ), तो यहाँ त्रुटि को पकड़ने और ठीक करने का तरीका है।

\n\n

चरण 1. कनेक्शन जाँचें

\n
$link = mysql_connect('localhost', 'user', 'password');\nif (!$link) {\n    die('कनेक्शन त्रुटि: ' . mysql_error());\n}
\n\n

चरण 2. डेटाबेस चयन जाँचें

\n
if (!mysql_select_db('my_database')) {\n    die('डेटाबेस चयन विफल: ' . mysql_error());\n}
\n\n

चरण 3. क्वेरी को जाँच के साथ करें

\n
$sql = "SELECT * FROM users WHERE id = 1";\n$result = mysql_query($sql);\n\nif (!$result) {\n    die('क्वेरी त्रुटि: ' . mysql_error());\n}\n\n// अब सुरक्षित रूप से उपयोग कर सकते हैं\nwhile($row = mysql_fetch_assoc($result)) {\n    echo $row['name'];\n}
\n\n

अंतर देखा? हम हर कदम की जाँच कर रहे हैं। अगर mysql_query() false लौटाता है — हम त्रुटि संदेश के साथ रुक जाते हैं, न कि false को आगे भेजते हैं।

\n\n

यह अभी भी क्यों काम करता है? (ऐतिहासिक संदर्भ)

\n\n

Stack Overflow पर इस प्रश्न के हज़ारों व्यूज़ हैं। और यह आश्चर्य की बात नहीं है: आज भी कई होस्टिंग्स पर PHP 5.x चल रहा है, और ढेरों ट्यूटोरियल (YouTube पर भी) mysql_* के माध्यम से पढ़ाते हैं।

\n\n

लेकिन हमेशा याद रखें: mysql एक्सटेंशन पुराना हो चुका है और PHP 7.0 से हटा दिया गया है। अगर आप नया कोड लिख रहे हैं — mysqli या PDO का उपयोग करें।

ब्लॉग

पुस्तक अनुशंसाएँ