mysql_fetch_array() 期望参数 1 是资源问题 [重复]
Posted
技术标签:
【中文标题】mysql_fetch_array() 期望参数 1 是资源问题 [重复]【英文标题】:mysql_fetch_array() expects parameter 1 to be resource problem [duplicate] 【发布时间】: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" style="background:#5C915C; color:white; border:white 1px solid; text-align: left"><strong><font size="2">Update Students</td>
<tr>
<td ><font size="2">*I D Number:</td>
<td ><input name="idnum" onkeypress="return isNumberKey(event)" type="text" maxlength="5" id='numbers'/ value="<?php echo $_GET['id']; ?>"></td>
</tr>
<tr>
<td ><font size="2">*Year:</td>
<td ><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']);
【参考方案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()
中的错误。您是否检查过它是否有效?输出$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
对于整数就足够了。基本上你想避免 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']));
或者您应该在尝试执行查询之前检查这一点,以便向用户显示更好的错误消息。
【讨论】:
以上是关于mysql_fetch_array() 期望参数 1 是资源问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
登录脚本中的“警告:mysql_fetch_array() 期望参数 1 是资源,布尔值”
什么是 mysql_fetch_array() 期望参数 1 是资源? [复制]
mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数1是资源
mysql_fetch_array 不呈现 SQL 查询的期望值