sql >> データベース >  >> RDS >> Mysql

mysqliページネーションをプリペアドステートメントページネーションに変換します

    この回答は、プリペアドステートメントを使用してクエリを記述した結果セットをパジネートします。 方法2。

    以下の参照用の完全なコード。ありがとう

    <?php
    // Script and tutorial written by Adam Khoury @ developphp.com
    // Line by line explanation : youtube.com/watch?v=T2QFNu_mivw
    include_once("storescripts/connect_to_mysqli.php");
    // This first query is just to get the total count of rows
    $stmt=$myConnection->prepare('SELECT COUNT(id) FROM products');
    // Don't use bind_result()...
    // execute your statement
    $stmt->execute();
    // Get result set into a MySQLi result resource
    $result = $stmt->bind_result($id);
    
    // array to hold all rows
    $rows = array();
    
    // All results bound to output vars
    while ($stmt->fetch()) {
      // Append an array containing your result vars onto the rowset array
      $rows[] = array(
        'id' => $id
      );
    }
      $rows=$id;
    
    
    // This is the number of results we want displayed per page
    $page_rows = 10;
    // This tells us the page number of our last page
    $last = ceil($rows/$page_rows);
    // This makes sure $last cannot be less than 1
    if($last < 1){
        $last = 1;
    }
    // Establish the $pagenum variable
    $pagenum = 1;
    // Get pagenum from URL vars if it is present, else it is = 1
    if(isset($_GET['pn'])){
        $pagenum = preg_replace('#[^0-9]#', '', $_GET['pn']);
    }
    // This makes sure the page number isn't below 1, or more than our $last page
    if ($pagenum < 1) { 
        $pagenum = 1; 
    } else if ($pagenum > $last) { 
        $pagenum = $last; 
    }
    $dynamicList = "";
    $stmt = $myConnection->prepare('SELECT id,product_name,price FROM products ORDER BY product_name LIMIT ?,? ');
    $begin= ($pagenum - 1) * $page_rows;
    $end= $page_rows;
    $stmt->bind_param('ii',$begin,$end);
    $stmt->execute();
            /* store result */
            $stmt->store_result();
            /* get the row count */
            $count = $stmt->num_rows;
            if ($count >= 1) {
                $stmt->bind_result($id, $product_name, $price);
    // This shows the user what page they are on, and the total number of pages
    $textline1 = "Products (<b>$rows</b>)";
    $textline2 = "Page <b>$pagenum</b> of <b>$last</b>";
    // Establish the $paginationCtrls variable
    $paginationCtrls = '';
    // If there is more than 1 page worth of results
    if($last != 1){
        /* First we check if we are on page one. If we are then we don't need a link to 
           the previous page or the first page so we do nothing. If we aren't then we
           generate links to the first page, and to the previous page. */
        if ($pagenum > 1) {
            $previous = $pagenum - 1;
            $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$previous.'">Previous</a> &nbsp; &nbsp; ';
            // Render clickable number links that should appear on the left of the target page number
            for($i = $pagenum-4; $i < $pagenum; $i++){
                if($i > 0){
                    $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; ';
                }
            }
        }
        // Render the target page number, but without it being a link
        $paginationCtrls .= ''.$pagenum.' &nbsp; ';
        // Render clickable number links that should appear on the right of the target page number
        for($i = $pagenum+1; $i <= $last; $i++){
            $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; ';
            if($i >= $pagenum+4){
                break;
            }
        }
        // This does the same as above, only checking if we are on the last page, and then generating the "Next"
        if ($pagenum != $last) {
            $next = $pagenum + 1;
            $paginationCtrls .= ' &nbsp; &nbsp; <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Next</a> ';
        }
    }
    
    
    while ($stmt->fetch()) {
                    "$id, $product_name, $price,";
                    $dynamicList .= "
                    <li><div class='product'>
                    <a href='product.php?id=$id' class='info'>
                    <span class='holder'>
                    <img src='inventory_images/$id.jpg' alt='$product_name' />
                    <span class='book-name'>$product_name</span>
                    </a>
                     <a href='product.php?id=$id' class='buy-btn'>RM<span class='price'>$price</span></a>
                    </div>
                    </li>
    
                  ";
    }
        }
    // Close your database connection
    mysqli_close($myConnection);
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <style type="text/css">
    body{ font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;}
    div#pagination_controls{font-size:21px;}
    div#pagination_controls > a{ color:#06F; }
    div#pagination_controls > a:visited{ color:#06F; }
    </style>
    </head>
    <body>
    <div>
      <h2><?php echo $textline1; ?> Paged</h2>
      <p><?php echo $textline2; ?></p>
      <p><?php echo $dynamicList; ?></p>
      <div id="pagination_controls"><?php echo $paginationCtrls; ?></div>
    </div>
    </body>
    </html>
    


    1. mysqlの既存の列名で2つの列を1つに連結する方法は?

    2. OracleでXLSX(Excel)ファイルを読み取ってインポートする

    3. SQLiteクエリ結果をCSVファイルにエクスポートする

    4. Trunc()がPostgreSQLでどのように機能するか