2013-10-08 3 views
1

У меня проблема с разбиением на страницы. Я отлаживаю как можно меньше, и кажется, что есть проблема с запросом и выполнением SELECT. Если я выберу часть разбивки на страницы, запрос выполнит и отобразит все записи в длинной таблице. Я попытался выполнить массив, bindValue и bindParam, но ничего не работает, может ли кто-нибудь увидеть, что мне не хватает?PHP OOP Pagination

function showEmployees() { 
    $count = $this->dbh->query("SELECT * FROM employee_info"); 
    $count->rowCount(); 
    $count = $count->rowCount(); 

    // if ($count > 0) { 
    // echo "The total amount of employees is " . $count; 
    // } else { 
    // echo "There are no records in this table."; 
    // } 

    $page_rows = 10; 
    $last_page = ceil($count/$page_rows); 

    echo $last_page; 

    if ($last_page < 1) { 
    $last_page = 1; 
    } 

    $page_num = 10; 

    if (isset($_GET['pn'])) { 
    $page_num = preg_replace('#[^0-9]#', '', $_GET['pn']); 
    } 

    if ($page_num < 1) { 
    $page_num = 1; 
    } elseif ($page_num > $last_page) { 
    $page_num = $last_page; 
    } 

    $limit = 'LIMIT ' .($page_num -1) * $page_rows .', '. $page_rows;  

    $query = $this->dbh->prepare("SELECT * FROM employee_info ORDER BY employee_id DESC :page_limit"); 
    $query->bindParam(':page_limit', $limit); 
    $query->execute(); 


    $t = "<table name='displayEmployees' border='1' >"; 
    $t .="<tr>"; 
    $t .= "<th>Employee ID</th>"; 
    $t .= "<th>First Name</th>"; 
    $t .= "<th>Last Name</th>";    
    $t .= "</tr>"; 

    while($u = $query->fetch(PDO::FETCH_ASSOC)) { 
    $t .="<tr>"; 
    $t .= "<td>{$u['employee_id']}</td>"; 
    $t .= "<td>{$u['first_name']}</td>"; 
    $t .= "<td>{$u['last_name']}</td>"; 
    $t .="</tr>"; 
    } 

    $t .="</table>"; 

    return $t; 
}  

ответ

0

Вы не можете включать ключевые слова в качестве параметров в подготовленные операторы. Вам нужно сделать, это:

$limit = 'LIMIT ' .($page_num -1) * $page_rows .', '. $page_rows;  
$query = "SELECT * FROM employee_info ORDER BY employee_id DESC ".$limit; 
$query->query($query); 

Примечание: поскольку параметры уже продезинфицировать скрипт вы можете доверять им, так что пользу от подготовленного заявления в значительной степени потеряли в этом случае.

+0

Спасибо Майк, я понимаю, что вы сказали, и оценить его, из-за паранойи инъекции я получил столько в привычку подготовке всех заявлений я делать это не думая, но вы правы , в таких случаях это избыточно, и жаль, что мне еще не разрешено голосовать. – Jake

1

Это похоже на то, как вы справлялись с лимитом, хотя это должно было сработать ошибка.

Try:

$beginLimit = ($page_num-1)*$page_rows; 
$endLimit = $page_rows; 
$query = $this->dbh->prepare("SELECT * FROM employee_info ORDER BY employee_id DESC LIMIT :begin,:end"); 
$query->bindValue(':begin',(int)$beginLimit,PDO::PARAM_INT); 
$query->bindValue(':end',(int)$endLimit,PDO::PARAM_INT); 
$query->execute(); 
+0

Большое спасибо Кейси, к сожалению, мне не разрешено голосовать, но это очень ценится. – Jake