什么是 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 是资源,给定对象 [重复]

需要有关 mysql_fetch_array() 错误的帮助?

从mysql转换为mysqli(mysql_fetch_array)[重复]