什么是 mysql_fetch_array() 期望参数 1 是资源? [复制]
Posted
技术标签:
【中文标题】什么是 mysql_fetch_array() 期望参数 1 是资源? [复制]【英文标题】:what is mysql_fetch_array() expects parameter 1 to be resource? [duplicate] 【发布时间】:2013-04-03 04:46:35 【问题描述】:请告诉我这有什么问题?我在第 17 行和第 21 行遇到错误,请帮忙。这个程序的目的是从数据库中获取并显示用户的详细信息。
<?php
// Connect to database server
mysql_connect("localhost", "root", "") or die (mysql_error ());
// Select database
mysql_select_db("lms") or die(mysql_error());
// (Line 17) Get data from the database depending on the value of the id in the URL
$strSQL = "SELECT * FROM login WHERE id=" . $_GET["id"];
$rs = mysql_query($strSQL);
// (Line 21) Loop the recordset $rs
while($row = mysql_fetch_array($rs))
// Write the data of the person
echo "<dt>Name:</dt><dd>" . $row["name"] . "</dd>";
echo "<dt>Username:</dt><dd>" . $row["username"] . "</dd>";
echo "<dt>Rollno:</dt><dd>" . $row["rollno"] . "</dd>";
?>
显示的错误信息是:
Undefined index: id in C:\wamp\www\phploginsession\person.php on line 17
mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\phploginsession\person.php on line 21
【问题讨论】:
表示 mysql_query($strSQL);返回 false,请检查您的查询是否有效 在mysql查询浏览器中执行SELECT * FROM login WHERE id=1
,看是否执行正常。另外,回显 $_GET['id'] 并查看它是否返回有效值
这段代码非常不安全,可能会受到mysql注入的影响。首先 mysql_ 函数已经死了,你不应该在 PDO 之类的东西上使用它们。其次,您只是接受 $_GET 的任何内容,甚至没有对其进行清理,这意味着如果有人知道自己在做什么,他们可能真的会搞砸您的服务器。
为什么不能在执行查询的地方使用or die(mysql_error());
并亲自查看错误?我很惊讶还没有人建议它
唯一可能造成问题的是$_GET["id"]
【参考方案1】:
// Connect to database server
$con=mysql_connect("localhost", "root", "") or die (mysql_error ());
// Select database
mysql_select_db("lms",$con) or die(mysql_error());
// (Line 17) Get data from the database depending on the value of the id in the URL
$strSQL = "SELECT * FROM login WHERE id= 1 ";
$rs = mysql_query($strSQL,$con);
// (Line 21) Loop the recordset $rs
while($row = mysql_fetch_array($rs))
// Write the data of the person
echo "<dt>Name:</dt><dd>" . $row["name"] . "</dd>";
echo "<dt>Username:</dt><dd>" . $row["username"] . "</dd>";
echo "<dt>Rollno:</dt><dd>" . $row["rollno"] . "</dd>";
你可以试试这个.. 传递 db 对象
【讨论】:
不传递 db 对象不会影响结果,除非当然有多个 db 连接,我怀疑 OP 是这种情况 @asprin 是的,完全正确...它正常工作... 我正在尝试从本网络教程中执行示例 3。完全相同的。试图在我的项目中实现它。我不知道我哪里出错了?...请帮帮我。 html.net/tutorials/php/lesson20.php【参考方案2】://list.php
<html>
<head>
<title>Retrieve data from the database</title>
</head>
<body>
<ul>
<?php
// Connect to database server
mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());
// Select database
mysql_select_db("mydatabase") or die(mysql_error());
// SQL query
$strSQL = "SELECT * FROM people ORDER BY FirstName DESC";
// Execute the query (the recordset $rs contains the result)
$rs = mysql_query($strSQL);
// Loop the recordset $rs
while($row = mysql_fetch_array($rs))
// Name of the person
$strName = $row['FirstName'] . " " . $row['LastName'];
// Create a link to person.php with the id-value in the URL
$strLink = "<a href = 'test1.php?id=".$row['id']."'>" . $strNavn.' '.$strName . "</a>";
// List link
echo "<li>" . $strLink . "</li>";
// Close the database connection
mysql_close();
?>
</ul>
</body>
</html>
【讨论】:
我正在尝试从本网络教程中执行示例 3。完全相同的。试图在我的项目中实现它。我不知道我哪里出错了?...请帮帮我。 html.net/tutorials/php/lesson20.php 当我尝试 var_dump($_GET['id']) 它再次向我显示错误消息:( 它向您显示错误消息,因为您没有在 $_GET['id'] 中获取索引“id”。检查您从中获取此 id 索引的数据数组。 现在尝试通过替换您的 list.php 代码来使用它【参考方案3】:您的查询已损坏。在$rs = mysql_query($strSQL);
行之后添加:var_dump($rs)
以查看发生了什么并使用mysql_error()
对其进行调试。
【讨论】:
我确实用过这个......它说布尔值是假的,错误仍然存在......请通过第 17 行和第 21 行查看 t 中的任何特定错误。一定有什么东西。请帮我解决我的问题 啊,现在我明白了。你没有 $_GET['id']。您要么使用 POST 向此页面提交表单并且应该使用 $_POST,要么您没有正确使用 GET。使用print_r($_GET)
检查 GET 变量,使用 print_r($_POST)
检查 POST 变量。无论哪种方式,您很重要:您的代码容易受到 SQL 注入。在将其投入生产之前,请阅读有关 SQL 注入的信息!
请告诉我如何摆脱它???
@FranklinVaz:我告诉过你阅读有关 SQL 注入的内容,你问我这件事。您是否甚至触摸搜索引擎以查找更多信息,或者您是否希望我解释此评论中的每一个小细节?或者你希望我把谷歌首页的所有链接都给你? 1. *** ***.com/questions/5741187/… 2. 直接来自 php.net:php.net/manual/en/security.database.sql-injection.php 3. Google:goo.gl/Km2a8以上是关于什么是 mysql_fetch_array() 期望参数 1 是资源? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
什么改变了循环中的条件:while (mysql_fetch_array($var))?
php while循环和foreach循环 mysql_fetch_array()
mysql_fetch_array() 期望参数 1 是资源问题 [重复]
mysql_fetch_array() 期望参数 1 是资源,给定对象 [重复]