Я расширяю класс PDO для добавления функций, которые манипулируют строкой запроса подготовленного оператора.Например, сделать запрос доступным для поиска или добавить нумерацию страниц.
Например:
$documents_query = $DB->prepare( "SELECT id, title, file_name, datetime_added
FROM documents
ORDER BY datetime_added DESC" );
$documents_query->paginate( $page_number, RESULTS_PER_PAGE );
Вопрос в том, как изменить строку запроса (которая только для чтения) и сохранить ее, чтобы она могла быть выполненапозже?
Это пример того, как выглядит мой расширенный класс PDOStatement:
class CustomStatement extends PDOStatement
{
public function paginate( $current_page, $max_results )
{
// Add SQL_CALC_FOUND_ROWS so we can count the total amount of results
$select_index = stripos( $this->queryString, 'SELECT' );
$statement = substr_replace( $this->queryString, 'SELECT SQL_CALC_FOUND_ROWS', $select_index, 6 );
// Add LIMIT to the end of the query
$start_limit = ( $current_page - 1 ) * $max_results;
$statement = $statement . ' LIMIT ' . $start_limit . ', ' . $max_results;
// What to do here?
return $this->prepare( $statement );
}
}