2010-04-23 45 views
9

可能重複:
​​mysql_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(」 SELECT * FROM student WHERE IDNO =「。(int)$ _ GET ['id']);' – binaryLV 2010-04-23 09:29:17

回答

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()中的錯誤。你有沒有檢查以確保它的工作?輸出值$resultmysql_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就足夠整數。基本上你想避免SQL注入。

0

在您的數據庫中「IDNO」的類型是什麼?您可能需要逃避這裏的SQL:

$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查詢中的數據,以避免SQL injections

例如,在這裏,你應該確保$_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'"); 

我想這樣的作品..

相關問題