警告:mysqli_fetch_assoc()要求参数1为mysqli_result,给定字符串


Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, string given

当我点击搜索按钮而没有在文本框中输入任何文本时,它会给我"警告:mysqli_fetch_assoc()期望参数1是mysqli_result,字符串给定"这个错误,我该如何解决这个问题,这是我的代码,如果有任何帮助,将不胜感激

<?php
$title ="Manage Page";
include "includes/home_page_header.php";
?>
<?php
$error_array = array();
$count =1;
$firstName = $lastName = $email = $status =$res_users = $checkbox ="";
if(isset($_POST['Search']))
{
    $firstName = $_POST['firstName'];
    $lastName  = $_POST['lastName'];
    $email     = $_POST['email'];
    $status    = $_POST['status'];      

if($firstName !="")
{
    $sql_users ="SELECT * FROM `users` WHERE `firstName` LIKE '$firstName'";
}
else if($lastName !="")
{   
    $sql_users ="SELECT * FROM `users` WHERE `lastName` LIKE '$lastName'";
}
else if($email !="")
{   
    $sql_users ="SELECT * FROM `users` WHERE `email` LIKE '$email'";
}
else if($firstName !="" && $lastName !="")
{
    $sql_users ="SELECT * FROM `users` WHERE `firstName` LIKE '$firstName' AND `lastName` LIKE '$lastName'";
}
else
{
    $sql_users = "SELECT * FROM `users`";
}   
if(isset($_GET['user_id']))
{
    $user_id = $_GET['user_id'];
    $sql_users = "DELETE from `users` WHERE user_id=".$user_id;
if ($link->query($sql_users) == TRUE)
{
     $error ="Record deleted successfully"; 
     array_push($error_array,$error);
}
if ($link->query($sql_users) == FALSE) 
{
    $error = "Your Abort Delete operation";
    array_push($error_array,$error);
}
}
if($status == "Active")
{
    $sql_users= "SELECT * FROM `users` WHERE `status` LIKE 'Active'";
    $res_users = mysqli_query($link,$sql_users);
    if($res_users && mysqli_num_rows($res_users) > 0)
    {           
        while($log_row_users = mysqli_fetch_assoc($res_users))                              
        {
           $status = $log_row_users["status"];                  
        }
    }
}
if($status == "Inactive")
{
    $sql_users= "SELECT * FROM `users` WHERE `status` LIKE 'Inactive'"; 
    $res_users = mysqli_query($link,$sql_users);
    if($res_users && mysqli_num_rows($res_users) > 0)
    {           
        while($log_row_users = mysqli_fetch_assoc($res_users))                              
        {
           $status = $log_row_users["status"];          
        }
    }
}
$res_users = mysqli_query($link ,$sql_users);

}
if(isset($_POST['delete_all']))
{
}
?>
<script>
$(document).ready(function()
{
    $(".delete_button").on('click',function()
    {
        var result =confirm("Are you sure you want to delete ?");
        if(result)
        {
            return true;
        }
        else
        {
            return false;
        }
    });
});
//function wantTodelete(user_id)
//{
//  return confirm("Are you sure you want to delete ?");
//}

$(document).ready(function()
{
    $("#checkAll").change(function () {
    $("input:checkbox").prop('checked', $(this).prop("checked"));
});
});
</script>
<table border="1px" class="manage_table">
<form name="listingForm" action="" method="post">
<tr>
<?php
if($error_array !=0)
{
    foreach($error_array as $value)
    {
        echo "<tr style='color:green;'><td></td><td> ". $value. "</td></tr>";   
    }
}
?>
</tr>
<tr>
<td></td>
<td><input type="text" name="firstName"></td>
<td><input type="text" name="lastName"></td>
<td><input type="text" name="email"></td>
<td>
<select name="status">
<option>Select Status </option>
<option value="Active"   <?php echo $status;?>>Active     </option>
<option value="Inactive" <?php echo $status;?>>Inactive   </option>
</select>
</td>
<td><input style="width:135px" type="submit" name="Search" value="Search"></td>
<td><input type="submit" id="delete_all" name="delete_all" value="Delete All" onclick="return deleteAll();" /></td>
</tr>
<tr>
<th>Sr.No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Status</th>
<th>Action</th>
<th><input type="checkbox" id="checkAll" name="check_all[]"/></th>
</tr>
<?php                       
if($log_row_users = mysqli_fetch_assoc($res_users))                             
{            
     $user_id      = $log_row_users['user_id'];  
     $firstName    = $log_row_users['firstName'];
     $lastName     = $log_row_users['lastName'];
     $email        = $log_row_users['email'];
     $status       = $log_row_users['status'];
?>
<tr>
<td><?php echo $count++  ;?></td>
<td><?php echo $firstName;?></td>
<td><?php echo $lastName ;?></td>
<td><?php echo $email    ;?></td>
<td>
<?php 
if($status == "Active")
{
    echo "<b style='color:#3CF'>".$status."</b>";
}
 if($status == "Inactive")
{
    echo "<b style='color:#F00'>".$status."</b>";
};
?>
</td>
<td>
<a style="margin-left:25px" href="http://localhost/sample/home_page_edit.php?user_id=<?php echo $user_id;?>" onclick="redirectMe();" name="redirect" id="redirect"><img src="images/pencil.png" /></a>

<a style="margin-left:35px"  href="http://localhost/sample/home_page_manage.php?user_id=<?php echo $user_id;?>" name="delete_button" class="delete_button" ><img src="images/delete.png" /></a>
</td>
<th>
<input name="checkbox[]" type="checkbox" id="checkbox[]" class="checkbox">
</th>
</tr>
</form>
<?php
}
?>
</table>
<?php
include "includes/home_page_footer.php";
?>

试试这个,它会帮助你

 if(isset($_REQUEST['Search']))
    {
        $q = "SELECT * FROM users WHERE user_id!='' ";
        $firstName  = $_REQUEST['firstName'];
        $lastName   = $_REQUEST['lastName'];
        $email      = $_REQUEST['email'];
        $status     = $_REQUEST['status'];
        $temp='';
        if(!empty($firstName))
        {
            $temp.=" AND ";
            $temp.="firstName LIKE '%$firstName%'";
        }
        if(!empty($lastName))
        {
            $temp.=" AND ";
            $temp.="lastName LIKE '%$lastName%'";
        }
        if(!empty($email))
        {
            $temp.=" AND ";
            $temp.="email LIKE '%$email%'";
        }
        if(!empty($status))
        {
            $temp.=" AND ";
            $temp.="status LIKE '$status'";
        }
        $qry = $q. $temp. " order by user_id ASC";
    }
    else
    {
        $qry =  "SELECT * FROM users order by user_id DESC";
    }

在脚本开始时,用一个空字符串("")初始化$res_users

如果未设置$_POST['Search'],则永远不会执行$res_users = mysqli_query( ... );,因此在调用时,$res_users仍然是一个空字符串

if($log_row_users = mysqli_fetch_assoc($res_users))

我建议您在HTML输出之前对执行所有查询操作的代码进行规范化。否则,您可以重复$_POST检查:

if(isset($_POST['Search']) && $log_row_users = mysqli_fetch_assoc($res_users))

使用更面向对象的方法进行快速查询:

[...]
    $sql_users= "SELECT * FROM `users` WHERE `status` LIKE 'Inactive'"; 
    foreach($link->query($sql_users) as $row)
    {
        $status = $row["status"];      
    }
[...]

您也可以将其用作布尔值来检查运行的查询:

[...]
    if($db->query($sql)): [...] endif;
[...]

我还建议您在循环通过其数据之前检查结果是否为空:

[...]
    $result = mysqli_query($link, $sql);
    if($result != null): [...] endif;
[...]

另外,看看@fusion3k的答案。您的基础架构给您带来了限制。您需要重新评估如何处理此问题,并检查如何防止SQLi注入。

编辑:您可以使用面向对象的方法(OOP)更简单地管理数据流。

class Handler
{
    public function __construct( $args )
    {
         if(is_array( $args ))
         {
             switch($args['type'])
             {
                 case "Insert":
                     break;
                 default:
                     break;
             }
       [...]

然后像这样工作:

new Handler(array(
    'type' => $_POST[...]
    [...] => [...]
));