mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等期望参数 1 是资源

2022-08-30 05:46:18

我正在尝试从MySQL表中选择数据,但我收到以下错误消息之一:

mysql_fetch_array() 期望参数 1 是资源,给定布尔值

这是我的代码:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}

答案 1

查询可能由于各种原因而失败,在这种情况下,mysql_* 和 mysqli 扩展都将从其各自的查询函数/方法返回。您需要测试该错误条件并相应地进行处理。false

mysql_扩展

注意mysql_函数已弃用,并在 php 版本 7 中被删除。

在将其传递给 之前进行检查。您会发现这是因为查询失败。请参阅 [][1] 文档,了解可能的返回值和如何处理它们的建议。$resultmysql_fetch_arrayfalsemysql_query

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    trigger_error(mysql_error(), E_USER_ERROR);
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

答案 2

当您的查询中存在导致查询失败的错误时,将显示此错误消息。它将在使用时表现出来:

  • mysql_fetch_array/mysqli_fetch_array()
  • mysql_fetch_assoc()/mysqli_fetch_assoc()
  • mysql_num_rows()/mysqli_num_rows()

注意:如果没有行受查询影响,则不会显示此错误。只有语法无效的查询才会生成此错误。

疑难解答步骤

  • 确保已将开发服务器配置为显示所有错误。您可以通过将其放在文件的顶部或配置文件中来执行此操作:error_reporting(-1);。如果您有任何语法错误,这将向您指出它们。

  • 使用 mysql_error() 。 将报告MySQL在执行查询时遇到的任何错误。mysql_error()

    示例用法:

    mysql_connect($host, $username, $password) or die("cannot connect"); 
    mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name";
    $result = mysql_query($sql);
    
    if (false === $result) {
        echo mysql_error();
    }
    
  • 从MySQL命令行或phpMyAdmin等工具运行查询。如果查询中存在语法错误,这将告诉您它是什么。

  • 确保您的报价正确无误。查询或值两边缺少引号可能会导致查询失败。

  • 确保你正在逃避你的价值观。查询中的引号可能会导致查询失败(并且还会使您对 SQL 注入保持开放状态)。使用 mysql_real_escape_string() 转义输入。

  • 确保你没有混合和功能。它们不是一回事,不能一起使用。(如果您要选择一个或另一个,请坚持使用 .有关原因,请参阅下文。mysqli_*mysql_*mysqli_*

其他提示

mysql_*函数不应用于新代码。它们不再维护,社区已经开始弃用过程。相反,您应该了解预准备语句并使用PDOMySQLi。如果您无法决定,本文将有助于选择。如果你想学习,这里是很好的PDO教程


推荐