如何将结果从PDO查询粘贴到Paginate?

时间:2017-03-22 08:59:13

标签: pdo paginate

我使用PDO查询从数据库中检索所有数据,结果很好。 但是,这只显示LIMIT的结果,如10。 我现在的问题是如何将此结果粘贴到paginate? 我想设置10个perpage的结果,并且接下来对于所有数据都有1 2 3 4。 下面的脚本对我来说是好的和快速的结果。

    <?php
//load database connection
    $host = "localhost";
    $user = "root";
    $password = "";
    $database_name = "";
    $pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ));
// Search from MySQL database table
$search=$_POST['search'];
$query = $pdo->prepare("select * from table where colum1 LIKE '%$search%' OR colum2 LIKE '%$search%'  LIMIT 0 , 10");
$query->bindValue(1, "%$search%", PDO::PARAM_STR);
$query->execute();
// Display search result
         if (!$query->rowCount() == 0) {
                echo "Search found :<br/>";
                echo "<table style=\"font-family:arial;color:#333333;\">";  
                echo "<tr><td style=\"border-style:solid;border-width:1px;border-color:#98bf21;background:#98bf21;\">Title Books</td><td style=\"border-style:solid;border-width:1px;border-color:#98bf21;background:#98bf21;\">Author</td><td style=\"border-style:solid;border-width:1px;border-color:#98bf21;background:#98bf21;\">Price</td></tr>";             
            while ($results = $query->fetch()) {
                echo "<tr><td style=\"border-style:solid;border-width:1px;border-color:#98bf21;\">";            
                echo $results['name'];
                echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#98bf21;\">";
                echo $results['description'];
                echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#98bf21;\">";
                echo "$".$results['thumb'];
                echo "</td></tr>";              
            }
                echo "</table>";        
        } else {
            echo 'Nothing found';
        }
?>

1 个答案:

答案 0 :(得分:2)

我建议您创建一个分页类,然后包含该类。

<强> pagination.php

<?php
class paginate
{

    private $pdo;

    function __construct($pdo)
    {

        $this->db = $pdo;

    }

    public function dataview($query,$Search)
    {

        $stmt = $this->db->prepare($query);
        $stmt->execute(arary($Search,$Search));

        $results = $stmt->fetchall();

        if (count($results) > 0) {?>
           Search found : <br/>
           <table style="font-family:arial;color:#333333;">";  
            <tr><td style="border-style:solid;border-width:1px;border-color:#98bf21;background:#98bf21;">Title Books</td><td style="border-style:solid;border-width:1px;border-color:#98bf21;background:#98bf21;">Author</td><td style="border-style:solid;border-width:1px;border-color:#98bf21;background:#98bf21;\">Price</td></tr>
            <?php 

            foreach ($results as $row):

?>

                <tr><td style="border-style:solid;border-width:1px;border-color:#98bf21;">
                <?php echo $row['name'];?></td>
                <td style="border-style:solid;border-width:1px;border-color:#98bf21;">;
                <?php echo $row['description'];?>
                </td>
                <td style="border-style:solid;border-width:1px;border-color:#98bf21;">
                <?php echo $row['thumb'];?>
                </td></tr>
<?php
            endforeach;
            echo "</table>";
        } else {

            echo "<p> Nothing found </p>";
        }


    }


    public function paging($query, $records_per_page)
    {

        $starting_position = 0;

        if (isset($_GET['page_no'])) {

            $starting_position = ($_GET["page_no"] - 1) * $records_per_page;
        }
        $query2 = $query . " limit $starting_position,$records_per_page";
        return $query2;


    }

    public function paginglink($query, $records_per_page)
    {


        $self = $_SERVER['PHP_SELF'];

        $stmt = $this->db->prepare($query);
        $stmt->execute();

        $total_no_of_records = $stmt->rowCount();
        if ($total_no_of_records > 0) {
?>
<ul class="pagination"><?php
            $total_no_of_pages = ceil($total_no_of_records / $records_per_page);
            $current_page      = 1;
            if (isset($_GET["page_no"])) {
                $current_page = $_GET["page_no"];
            }
            if ($current_page != 1) {
                $previous = $current_page - 1;

                echo "<li><a  href='" . $self . "?page_no=1' >First</a></li>";
                echo "<li><a  href='" . $self . "?page_no=" . $previous . "'>Previous</a></li>";


            }
            for ($i = 1; $i <= $total_no_of_pages; $i++) {
                if ($i == $current_page) {

                    echo "<li class='active'><a  href='" . $self . "?page_no=" . $i . "' >" . $i . "</a></li>";


                } else {

                    echo "<li><a   href='" . $self . "?page_no=" . $i . "'>" . $i . "</a></li>";
                }
            }
            if ($current_page != $total_no_of_pages) {
                $next = $current_page + 1;

                echo "<li><a   href='" . $self . "?page_no=" . $next . "'>Next</a></li>";
                echo "<li><a href='" . $self . "?page_no=" . $total_no_of_pages . "'>Last</a></li>";
            }
?></ul>
<?php
        }
    }


}
?>

<强> page.php文件

<?php
    //your connection
    $host = "localhost";
    $user = "root";
    $password = "";
    $database_name = "";
    $pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    )); 
    include_once'pagination.php';
    $paginate = new paginate($pdo);


$search=$_POST['search'];
$Search = "%$search%";

$query = "SELECT * from table where colum1 LIKE ? OR colum2 LIKE ? ";       
$records_per_page=10;
$newquery = $paginate->paging($query,$records_per_page,$Search);
$paginate->dataview($newquery,$Search);
$paginate->paginglink($query,$records_per_page); 
?>

这应该有效。欢迎提出建议/意见。

这是我使用上述代码进行分页的项目之一:

enter image description here

或使用jquery dataTables,它也可以完美地运行

您只需要下载https://datatables.net/

enter image description here

使用Datatables,简单下载然后添加所需的脚本和css,然后在你的表上添加一个ID,然后初始化datatable

 $('#TableID').dataTable();

您可能需要进行正确的表格标记,

<table>
   <thead>
       <tr>
         <th>Title</th>
       </tr>
   </thead>
   <tbody>
   <tr>
      <td>Text</td>
   </tr>
  </tbody>