我试图从一个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'];
}

当前回答

在To之前使用db_close()确保你没有关闭数据库 运行查询:

如果你在一个脚本中使用多个查询,即使你包含了包含查询或数据库连接的其他页面,那么在你使用db_close()的任何地方都可能关闭你的数据库连接,所以确保你没有在你的脚本中犯这个错误。

其他回答

<?php
    $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'];
    }
?>

如果有一个用户具有唯一的用户名,您可以使用“=”表示。没有必要喜欢。

您的查询将是:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");

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

mysql_扩展:

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

在将$result传递给mysql_fetch_array之前检查$result。您会发现它是假的,因为查询失败了。请参阅[mysql_query][1]文档了解可能的返回值以及如何处理它们的建议。

$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'];
}

在执行取回数组之前,你也可以检查$result是否失败

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}

这里发生的错误是由于使用了单引号(')。你可以这样写你的查询:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

它使用mysql_real_escape_string来防止SQL注入。 虽然我们应该使用MySQLi或PDO_MYSQL扩展的升级版本的PHP (PHP 5.5.0及以后),但对于旧版本mysql_real_escape_string将做的把戏。

正如scompt.com所解释的,查询可能会失败。使用此代码获取查询的错误或正确的结果:

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

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

if($result)
{
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

有关更多信息,请参阅mysql_query()的文档。

实际的错误是单引号,因此没有解析变量$username。但是你应该使用mysql_real_escape_string($username)来避免SQL注入。