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

当前回答

因为$username是一个PHP变量,我们需要将它作为字符串传递给mysqli,所以在查询中,你以单引号开始,我们将使用双引号,单引号和句号来连接("'.$username.'"),如果你以双引号开始,你将反转引号('".$username."')。

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

$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的使用已经贬值了很多,改用PDO。它很简单,但非常安全

其他回答

查询可能会由于各种原因而失败,在这种情况下,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'];
}
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

您可以使用ORDER BY查询,而不是使用WHERE查询。对于查询的使用,它比这个要好得多。

我已经完成了这个查询,没有得到参数或布尔值之类的错误。

在执行取回数组之前,你也可以检查$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'];
       }
}

在$username周围加上引号。字符串值,与数字值不同,必须用引号括起来。

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

同样,如果不使用通配符,使用LIKE条件也没有意义:如果需要精确匹配,则使用=而不是LIKE。

这个查询应该工作:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

问题是单引号,因此你的查询失败并返回FALSE,你的WHILE循环不能执行。使用%可以匹配任何包含字符串的结果(例如SomeText-$username-SomeText)。

这只是对你的问题的回答,你应该实现其他帖子中提到的东西:错误处理,使用转义字符串(用户可以在字段中输入任何内容,并且你必须确保它不是任意代码),使用PDO代替mysql_connect,现在已经被废弃了。