【问题标题】:mysql_fetch_array() expects parameter 1 to be resource problem [duplicate]mysql_fetch_array() 期望参数 1 是资源问题 [重复]
【发布时间】:2011-02-11 10:49:02
【问题描述】:

可能重复:
“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 } ?>

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

【问题讨论】:

  • 我建议至少将 $_GET['id'] 转换为 int: mysql_query("SELECT * FROM student WHERE IDNO=" . (int)$_GET['id']);

标签: php mysql html


【解决方案1】:

在调用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)时,我们会收到此错误。

【讨论】:

    【解决方案2】:
    $id = intval($_GET['id']);
    $sql = "SELECT * FROM student WHERE IDNO=$id";
    $result = mysql_query($sql) or trigger_error(mysql_error().$sql);
    

    总是这样做,它会告诉你哪里出了问题

    【讨论】:

      【解决方案3】:

      试试这个

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

      我认为这行得通..

      【讨论】:

        【解决方案4】:

        最可能的原因是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】:

          确保您的查询成功运行并获得了结果。你可以这样检查:

          $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....
          }
          

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

              你正在使用这个:

              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']));
              

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

              【讨论】:

                猜你喜欢
                • 2011-08-28
                • 1970-01-01
                • 2012-07-31
                • 2011-09-23
                • 1970-01-01
                • 2013-04-03
                • 1970-01-01
                • 2011-06-21
                相关资源
                最近更新 更多