2010-04-23 14 views
9

संभव डुप्लिकेट:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cartmysql_fetch_array() पैरामीटर 1 संसाधन समस्या होने की उम्मीद है

मैं समझ नहीं है, मैं इस कोड में कोई गलती देख लेकिन इस त्रुटि है , मदद करें:
mysql_fetch_array() उम्मीद पैरामीटर 1 संसाधन समस्या हो

<?php 

     $con = mysql_connect("localhost","root","nitoryolai123$%^"); 
    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

    mysql_select_db("school", $con); 
     $result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); 
    ?>  


          <?php while ($row = mysql_fetch_array($result)) { ?>    
            <table class="a" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#D3D3D3"> 
    <tr> 

    <form name="formcheck" method="get" action="updateact.php" onsubmit="return formCheck(this);"> 
    <td> 
    <table border="0" cellpadding="3" cellspacing="1" bgcolor=""> 
    <tr> 

    <td colspan="16" height="25" style="background:#5C915C; color:white; border:white 1px solid; text-align: left"><strong><font size="2">Update Students</td> 


    <tr> 
    <td width="30" height="35"><font size="2">*I D Number:</td> 
    <td width="30"><input name="idnum" onkeypress="return isNumberKey(event)" type="text" maxlength="5" id='numbers'/ value="<?php echo $_GET['id']; ?>"></td> 
    </tr> 

    <tr> 
    <td width="30" height="35"><font size="2">*Year:</td> 
    <td width="30"><input name="yr" onkeypress="return isNumberKey(event)" type="text" maxlength="5" id='numbers'/ value="<?php echo $row["YEAR"]; ?>"></td> 

<?php } ?> 

मैं सिर्फ फॉर्म में डेटा लोड करने की कोशिश कर रहा हूं लेकिन मुझे नहीं पता कि यह त्रुटि क्यों दिखाई देती है। यहां संभवतः गलती क्या हो सकती है?

+1

मैं कम से कम डाली '$ _GET' int' करने के लिए [ 'आईडी'] 'करने के लिए सिफारिश करेंगे: ' mysql_query (" चुनें * छात्र से जहां आईडीएनओ = "। (Int) $ _ प्राप्त करें ['id']);' – binaryLV

उत्तर

23

आप त्रुटि mysql_query करने के लिए कॉल के बाद जाँच नहीं कर रहे हैं:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); 
if (!$result) { // add this check. 
    die('Invalid query: ' . mysql_error()); 
} 

मामले mysql_query में विफल रहता है, यह false, एक boolean मान देता है। जब आप इसे mysql_fetch_array फ़ंक्शन पर पास करते हैं (जो mysql result object की अपेक्षा करता है) हमें यह त्रुटि मिलती है।

0

सुनिश्चित करें कि आपकी क्वेरी सफलतापूर्वक भाग गई और आपको परिणाम मिल गए। आप इस तरह की जांच कर सकते हैं:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']) or die(mysql_error()); 


if (is_resource($result)) 
{ 
    // your while loop and fetch array function here.... 
} 
0

सबसे संभावित कारण mysql_query() में एक त्रुटि है। क्या आपने यह सुनिश्चित करने के लिए जांच की है कि यह काम करता है? आउटपुट $result और mysql_error() का मान। तुम गलत डेटाबेस चयनित कुछ गलत वर्तनी हो सकता है, एक अनुमतियाँ मुद्दा है, आदि तो:

$id = (int)$_GET['id']; // this also sanitizes it 
$sql = "SELECT * FROM student WHERE idno = $id"; 
$result = mysql_query($sql); 
if (!$result) { 
    die("Error running $sql: " . mysql_error()); 
} 

साफ करना $_GET['id']वास्तव में महत्वपूर्ण है। आप mysql_real_escape_string() का उपयोग कर सकते हैं लेकिन इसे int पर कास्टिंग पूर्णांक के लिए पर्याप्त है। असल में आप एसक्यूएल इंजेक्शन से बचना चाहते हैं।

0

आपके डेटाबेस में "आईडीएनओ" का प्रकार क्या है? आप एसक्यूएल यहाँ से बचने के लिए आवश्यकता हो सकती है:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); 
2
$id = intval($_GET['id']); 
$sql = "SELECT * FROM student WHERE IDNO=$id"; 
$result = mysql_query($sql) or trigger_error(mysql_error().$sql); 

हमेशा यह इस तरह से करते हैं और इसे आपको बता देंगे क्या

0

आप इस का उपयोग कर रहे गलत है:

mysql_fetch_array($result) 

प्राप्त करने के लिए आपको जो त्रुटि मिल रही है, इसका मतलब है कि $result संसाधन नहीं है।


अपने कोड में, $result इस तरह से प्राप्त किया जाता है:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); 

तो SQL क्वेरी विफल रहता है, $result एक संसाधन नहीं होगा, लेकिन एक बूलियन - mysql_query देखते हैं।

मैं वहाँ अपने SQL क्वेरी में एक त्रुटि लगता है - तो यह विफल रहता है, mysql_query एक बूलियन, और नहीं एक संसाधन देता है, और mysql_fetch_array उस पर काम नहीं कर सकते।


यदि SQL क्वेरी एक परिणाम है या नहीं देता है आप की जाँच करनी चाहिए:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); 
if ($result !== false) { 
    // use $result 
} else { 
    // an error has occured 
    echo mysql_error(); 
    die; // note : echoing the error message and dying 
      // is OK while developping, but not in production ! 
} 
इसी के साथ

, आप एक संदेश है कि त्रुटि है कि जब आपकी क्वेरी को क्रियान्वित हुई इंगित करता है मिलना चाहिए - यह आंकड़ा मदद करनी चाहिए समस्या क्या है ;-)


साथ ही, SQL injections से बचने के लिए, आपको अपने SQL क्वेरी में डाले गए डेटा से बच जाना चाहिए!

उदाहरण के लिए, यहाँ, आप यह सुनिश्चित करें कि $_GET['id'] एक पूर्णांक से और कुछ नहीं होता है कुछ इस तरह का उपयोग कर करना चाहिए,:

$result = mysql_query("SELECT * FROM student WHERE IDNO=" . intval($_GET['id'])); 

या आप क्वेरी को निष्पादित करने के प्रयास करने से पहले यह देखना चाहिए, एक अच्छे प्रदर्शित करने के लिए उपयोगकर्ता को त्रुटि संदेश।

2

दें कि यह एक कोशिश

$indo=$_GET['id']; 
$result = mysql_query("SELECT * FROM student WHERE IDNO='$indo'"); 

मैं इस काम करता है लगता है ..

संबंधित मुद्दे

 संबंधित मुद्दे