mysql_fetch_assoc()期望参数1是resource,中给定的布尔值


mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in

我出现此错误mysql_fetch_assoc()要求参数1为资源,当我尝试登录系统时,第121行给出布尔值。这是我针对特定问题的代码部分。有人知道为什么代码会出现这种情况吗?

if(isset($_POST["loginbtn"]))
{
$uid = $_POST["userid"];
$pword = $_POST["userpass"];
$result = mysql_query("SELECT * FROM admin WHERE Ad_ID = '$uid' AND Ad_Pass = '$pword'
   ");
if($row = mysql_fetch_assoc($result))
{
    $_SESSION ["loggedin"] = "true" ;
   $_SESSION ["adid"] = $row ["Ad_ID"];
   $_SESSION ["adname"] = $row ["Ad_Name"];
   $_SESSION ["adaright"] = $row ["Ad_ARight"];
    if($row ["Ad_ARight"]=='write')
        header('Location: HomeScreen.php');
    else if($row ["Ad_ARight"]=='read')
        header('Location: HomeScreenr.php');
}
else
{    
       echo '<div class="alert-message error"><p><b> Invalid username or              
password </b></p></div>';
}
}
?>
<div align="center">

您的查询失败,因此mysql_query返回了布尔值false。

找出错误的最好方法是添加一个错误处理程序。

$result = mysql_query("SELECT * FROM admin WHERE Ad_ID = '$uid' AND Ad_Pass = '$pword'") or die(mysql_error());

使用正确的Ad_ID和Ad_Pass执行查询,然后查看它是否显示任何结果。。可能结果是空白的。

SELECT * FROM admin WHERE Ad_ID = '$uid' AND Ad_Pass = '$pword'

请不要使用mysql,使用mysqli或PDO

请参阅文档,当出现错误时,mysql_query()会返回什么?您可能会发现运行mysql_error()以获取更多详细信息非常有用。

尝试使用mysql_num_rows进行检查,否则使用mysql_error()检查查询。

if(isset($_POST["loginbtn"]))
{
$uid = $_POST["userid"];
$pword = $_POST["userpass"];
$result = mysql_query("SELECT * FROM admin WHERE Ad_ID = '$uid' AND Ad_Pass = '$pword'
   ") die(mysql_error());
$num=mysql_num_rows($result);
if($num)
{
    $row = mysql_fetch_assoc($result)
    $_SESSION ["loggedin"] = "true" ;
   $_SESSION ["adid"] = $row ["Ad_ID"];
   $_SESSION ["adname"] = $row ["Ad_Name"];
   $_SESSION ["adaright"] = $row ["Ad_ARight"];
    if($row ["Ad_ARight"]=='write')
        header('Location: HomeScreen.php');
    else if($row ["Ad_ARight"]=='read')
        header('Location: HomeScreenr.php');
}
else
{    
       echo '<div class="alert-message error"><p><b> Invalid username or              
password </b></p></div>';
}
}
?>

请检查此代码。我不确定它是否有效。我认为它会很好地工作。

试着这样做检查。检查是否设置了$result并返回值。然后将数组分配给$row:

if(isset($result))
{
   $row = mysql_fetch_assoc($result)
   $_SESSION ["loggedin"] = "true" ;
   $_SESSION ["adid"] = $row ["Ad_ID"];
   $_SESSION ["adname"] = $row ["Ad_Name"];
   $_SESSION ["adaright"] = $row ["Ad_ARight"];
    if($row ["Ad_ARight"]=='write')
        header('Location: HomeScreen.php');
    else if($row ["Ad_ARight"]=='read')
   header('Location: HomeScreenr.php');
}

您还可以尝试检查它是否返回任何行:

$result = mysql_query("SELECT * FROM admin WHERE Ad_ID = '$uid' AND Ad_Pass = '$pword'");
$num_rows = mysql_num_rows($result);
if($num_rows > 0)
{
  $row = mysql_fetch_assoc($result)
   //CODE HERE
}