2013-08-24 3 views
0

Текущий рабочий код с mysqli приведен ниже. Я хотел бы преобразовать его в подготовленные заявления. существует в основном три запроса sql для преобразования в подготовленный оператор. первая часть - самая сложная часть для меня, чтобы разобраться в подготовленном способе получения значения счета, которое мне, в конце концов, удалось выяснить.Преобразование mysqli pagination в подготовленное заявление pagination

<?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 
$sql2 = "SELECT COUNT(id) FROM products "; 
$query2 = mysqli_query($myConnection, $sql2); 
$row = mysqli_fetch_row($query2); 
// Here we have the total row count 
$rows = $row[0]; 
// 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; 
} 
// This sets the range of rows to query for the chosen $pagenum 
$limit = 'LIMIT ' .($pagenum - 1) * $page_rows .',' .$page_rows; 
// This is your query again, it is for grabbing just one page worth of rows by applying $limit 
$sql = "SELECT id,product_name, price FROM products ORDER BY product_name DESC $limit"; 
$query = mysqli_query($myConnection, $sql); 
// 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> '; 
    } 
} 


$dynamicList = ''; 
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){ 
    $id = $row["id"]; 
    $product_name = $row["product_name"]; 
    $price = $row["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> 

заранее спасибо за любую помощь

ответ

0
$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; 

для первой части. Я думаю, что у вас есть это

+0

почему в то время как и массив здесь? –

+0

На самом деле я просто пытался получить номер графа ... лучше всего получить эту ценность? –

-1

Try и поместить сообщения об ошибках и посмотреть, если у вас есть ошибки на Mysqli заявления:

$stmt=$myConnection->prepare('SELECT id FROM products'); 

// due to syntax error or other reasons may be like privileges prepare can fail so 
if (false===$stmt) 
{ 
    // hope you will use better than die to handle but here's only example. 
    die('prepare() failed: ' . htmlspecialchars($myConnection->error)); 
} 

$ExecuteStmt = $stmt->execute(); 
// execute() can also fail for various reasons. 
if (false===$ExecuteStmt) 
{ 
    //again same thing about die(); 
    die('execute() failed: ' . htmlspecialchars($myConnection->error)); 
} 

$myConnection->close(); 

Надеется, что это помогает.

+0

Я получил этот массив массива (1) {[0] => array (1) {["id"] => int (50)}}, как извлечь этот 50-й номер? – user2712729

+0

не беспокойтесь, все отсортировано – user2712729

1

этот ответ был решен с помощью метода Paginate result set having written the query with prepared statements, 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> 
Смежные вопросы