Главная страница
Навигация по странице:

  • $db->SelectLimit()

  • $db->PageExecute()

  • $res->MaxRecordCount(); Также для управления постраничным выводом есть следующие методы: $res->AbsolutePage()

  • $res->LastPageNo()

  • $db->CompleteTrans();

  • $db->GenID()

  • Методические указания к выполнению лабораторных и курсовой работ ЙошкарОла 2007


    Скачать 0.8 Mb.
    НазваниеМетодические указания к выполнению лабораторных и курсовой работ ЙошкарОла 2007
    Дата15.03.2022
    Размер0.8 Mb.
    Формат файлаdoc
    Имя файлаsql (1).doc
    ТипМетодические указания
    #397929
    страница9 из 11
    1   2   3   4   5   6   7   8   9   10   11

    Постраничный вывод и ограничение SELECT-запросов


    Вообще-то не все базы данных умеют делать запросы типа: SELECT * FROM tab LIMIT 0, 10 а все те, которые умеют, делают это по разному.

    Класс adodb сам может делать ограниченные выборки, составляя правильные SQL-запросы под указанную БД, поддерживающую лимитированные SELECT-запросы

    SelectLimit("SELECT * FROM tab", 10, 0); ?>

    Метод $db->SelectLimit() сам построит правильный SQL-запрос. На основе этого метода в ADODB работают функции для постраничной выборки:

    // определяем текущую страницу
    $start = max(1, intval($_GET['start']));
    // количество записей на странице
    $rows_per_page = 10;
    $res = $db->PageExecute("SELECT * FROM tab", $rows_per_page, $start);

    // получаем найденное количество записей
    $records_amount = $res->MaxRecordCount();
    ?>

    Метод $db->PageExecute() кроме простого LIMIT-запроса делает автоматически еще и запрос типа: SELECT COUNT(*) FROM tab

    Таким образом узнается, сколько всего по данному запросу найдено строк. Это количество можно узнать с помощью метода: $res->MaxRecordCount();

    Также для управления постраничным выводом есть следующие методы:

    • $res->AbsolutePage() — возвращает текущую страницу

    • $res->AtFirstPage() — возвращает true если текущая страница — первая

    • $res->AtLastPage() — возвращает true если текущая страница — последняя

    • $res->LastPageNo() — возвращает номер последней страницы

    2. Генерирование INSERT/UPDATE запросов


    Пример:

    // пример генерировани INSERT-запроса

    // массив, который нужно вставить в таблицу
    $frm = array("field1"=>"value1", "field2"=>"value2");
    // делаем пустой запрос
    $res = $db->Execute("SELECT * FROM tab WHERE id = -1");
    // формируем SQL-запрос
    $sql = $db->GetInsertSQL($res, $frm);
    // выполняем запрос
    $db->Execute($sql)

    // пример генерирования UPDATE-запроса

    // получаем данные о строке, которую нужно обновить
    $res = $db->Execute("SELECT * FROM tab WHERE id = 17");
    $sql = $db->GetUpdateSQL($res, $frm);
    // выполняем запрос
    $db->Execute($sql)
    ?>

    Идея данного метода состоит в том, чтобы все данные, которые нужно вставить, необходимо записать в ассоциативный массив. Сделать запрос к БД чтобы получить имена полей таблицы и сконструировать SQL-запрос по этим данным.

    3. Работа с транзакциями


    Пример:

       $db->StartTrans();
       $db->Execute("update table1 set val=$val1 where id=$id");
       $db->Execute("update table2 set val=$val2 where id=$id");
       $db->CompleteTrans();
    ?>

    Метод $db->CompleteTrans(); проверит, были ли ошибки и если так  — сделает откат.

    ADODB имеет еще и другие функции для работы с транзакциями, но они устарели и разработчики ADODB рекомендуют использовать этот вариант.

    4. Последовательности


    Часто при работе с таблицами каждой записи нужно присвоить уникальный идентификатор, который потом используется в качестве первичного ключа. Но не все СУБД поддерживают такую возможность. ADODB эмулирует эту возможность почти для всех СУБД. На практике это выглядит примерно так:



       $uid = $db->GenID('site_users');
       $db->Execute("INSERT INTO site_users(uid, login, password) VALUES
            (".$uid.", '$login', '$password')");
    ?>

    Метод $db->GenID() создает последовательность site_users (если она до этого не была создана) и возвращает значение на единицу больше чем текущее значение последовательности.

    5. Кеширование запросов


    ADODB поддерживает серверное кеширование запросов. Суть в том, что при первом выполнении запроса его результаты заносятся в кеш-файл. При последующем таком же запросе (если кеш-файл не устарел) данные будут браться из файла.

    Пример:

       $ADODB_CACHE_DIR = '/tmp/ADODB_cache';
       $rs = $db->CacheExecute('SELECT * FROM tab');
    ?>

    По умолчанию время жизни кеш-файлов — 1 час. Это время можно изменить 2-мя путями:


       $db->cacheSecs = 24*3600 // 24 часа
       $rs = $db->CacheExecute('SELECT * FROM tab');

       // или так:
       // время жизни кеша может задаваться первым параметром
       // метода CacheExecute
       $rs = $db->CacheExecute(24*3500, 'SELECT * FROM tab');
    ?>
    1   2   3   4   5   6   7   8   9   10   11


    написать администратору сайта