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

可能重复:
“警告:mysql_fetch_array()期望参数1是资源,布尔给定”错误,同时尝试创build一个PHP的购物车

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

我只是试图加载数据的forms,但我不知道为什么会出现这个错误。 这里可能是什么错误呢?

在调用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 )时,我们得到这个错误。

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

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

试试这个

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

我认为这工作..

最可能的原因是mysql_query()一个错误。 你有检查,以确保它的工作? 输出$resultmysql_error() 。 您可能拼错了某些内容,select了错误的数据库,存在权限问题等。因此:

 $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注入。

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

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

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

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

你正在使用这个:

 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注入

例如,在这里,你应该确保$_GET['id']包含任何东西,除了一个整数,使用这样的东西:

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

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