Php 活动结果集中没有更多行。由于此结果集不可滚动,因此无法检索更多数据

Php 活动结果集中没有更多行。由于此结果集不可滚动,因此无法检索更多数据,php,sql-server,Php,Sql Server,关于我上面的问题,我创建了一个系统,要求用户选择“从”到“到”之间的日期。我使用了AJAX方法。当显示结果时,它将显示与我的主题相同的错误。代码如下: <?php if(isset($_POST["From"], $_POST["to"])) { $result = ''; $query = $conn->query("SELECT * FROM booking LEFT JOIN room ON booking.Room_ID = room.Room_ID WHE

关于我上面的问题,我创建了一个系统,要求用户选择“从”到“到”之间的日期。我使用了AJAX方法。当显示结果时,它将显示与我的主题相同的错误。代码如下:

<?php
if(isset($_POST["From"], $_POST["to"]))
{
    $result = '';

    $query = $conn->query("SELECT * FROM booking LEFT JOIN room ON booking.Room_ID = room.Room_ID WHERE Book_Status = 'Approve' 
    AND (room.Room_ID = '4' OR room.Room_ID = '5' OR room.Room_ID = '6' OR room.Room_ID = '7'
    OR room.Room_ID = '8' OR room.Room_ID = '9' OR room.Room_ID = '10') 
    AND Book_Date BETWEEN '".$_POST["From"]."' AND '".$_POST["to"]."' ORDER BY StartTime DESC");

    $query -> execute();
    $results = $query -> fetchAll(PDO::FETCH_OBJ);

    if($query->fetchColumn() > 0)
    {
        while($row = $query->fetch(PDO::FETCH_ASSOC))
        {
            $date = $row['StartTime'];
            $date2 = strtotime($date);
            $Start = date('h:i A', $date2);

            $date3 = $row['EndTime'];
            $date4 = strtotime($date3);
            $End = date('h:i A', $date4);

            $book = $row['Book_Date'];
            $book2 = strtotime($book);
            $DateBooked = date('d M Y', $book2);

            $result .='
            <tr>
            <td>'.$DateBooked.'</td>
            <td>'.$Start.'</td>
            <td>'.$End.'</td>
            <td>'.$row["Room_Desc"].'</td>
            <td>'.$row["Meeting_Description"].'</td>
            <td>'.$row["Admin_email"].'</td>
            <td>'.$row["Requested_by"].'</td>
            <td>'.$row["Remark"].'</td>
            </tr>';
        }
    }
    else
    {
        $result .='
        <tr>
        <td colspan="8">No Booking Room Found</td>
        </tr>';
    }
    $result .='</table>';
    echo $result;
}
?>

<代码> 您需要考虑以下内容:

  • 出现错误的原因是您正在使用相同的语句调用
    fetchAll()
    while($row=$query->fetch(PDO::fetch_ASSOC))
    。您应该从这两种可能的方法中选择一种,并正确地获取数据。返回包含结果集中所有剩余行的数组,同时从结果集中提取一行
  • 删除对
    $conn->query()
    的调用。相反,使用参数化查询来防止SQL注入
下一个基于代码的示例可能会有所帮助:

<?php
if (isset($_POST["From"], $_POST["to"])) {
    $result = '';

    $query = $conn->prepare("
        SELECT * 
        FROM booking 
        LEFT JOIN room ON booking.Room_ID = room.Room_ID 
        WHERE 
            Book_Status = 'Approve' AND 
            (room.Room_ID = '4' OR room.Room_ID = '5' OR room.Room_ID = '6' OR room.Room_ID = '7' OR room.Room_ID = '8' OR room.Room_ID = '9' OR room.Room_ID = '10') AND 
            Book_Date BETWEEN :from AND :to  
        ORDER BY StartTime DESC
    ");
    $query->bindParam(':from', $_POST["From"]);
    $query->bindParam(':to', $_POST["to"]);
    $query->execute();

    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        $date = $row['StartTime'];
        $date2 = strtotime($date);
        $Start = date('h:i A', $date2);

        $date3 = $row['EndTime'];
        $date4 = strtotime($date3);
        $End = date('h:i A', $date4);

        $book = $row['Book_Date'];
        $book2 = strtotime($book);
        $DateBooked = date('d M Y', $book2);

        $result .='
        <tr>
        <td>'.$DateBooked.'</td>
        <td>'.$Start.'</td>
        <td>'.$End.'</td>
        <td>'.$row["Room_Desc"].'</td>
        <td>'.$row["Meeting_Description"].'</td>
        <td>'.$row["Admin_email"].'</td>
        <td>'.$row["Requested_by"].'</td>
        <td>'.$row["Remark"].'</td>
        </tr>';
    }

    if ($result === "") {
        $result = '
        <tr>
        <td colspan="8">No Booking Room Found</td>
        </tr>';
    }   
    $result = '<table>'.$result.'</table>';
    echo $result;
}
?>

您的程序易受攻击。阅读: