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

当前回答

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

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将做的把戏。

其他回答

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

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将做的把戏。

首先检查你的连接。

然后,如果你想从数据库中获取准确的值,那么你应该这样写:

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

或者你想获取LIKE类型的值,那么你应该这样写:

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

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

这个查询应该工作:

$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,现在已经被废弃了。

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

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

有时将查询抑制为@mysql_query(您的查询);