mysql_fetch_array()期望参数1是资源问题

时间:2010-04-23 09:22:47

标签: php mysql html

  

可能重复:
  “Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cart

我不明白,我看到这段代码没有错误,但是有这个错误,请帮忙:
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 } ?>

我只是想在表单中加载数据,但我不知道为什么会出现错误。这可能是什么错误?

7 个答案:

答案 0 :(得分: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失败,则返回falseboolean值。当您将此传递给mysql_fetch_array函数(期望mysql result object)时,我们会收到此错误。

答案 1 :(得分:2)

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

总是这样做,它会告诉你什么是错的

答案 2 :(得分:2)

试一试

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

我认为这有效..

答案 3 :(得分: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....
}

答案 4 :(得分: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注入。

答案 5 :(得分:0)

在您的数据库中,“IDNO”的类型是什么?你可能需要在这里转义sql:

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

答案 6 :(得分: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']));

或者您应该在尝试执行查询之前检查这一点,以向用户显示更好的错误消息。