Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Функции для работы с бд

Все функции работы с БД в нашем примере изолированы в данном файле. Приведем исходный код файла: db.inc:

<?php #db.inc // Идентификатор соединения с БД HyTech // Внимание! Идентификатор соединения можно использовать только // как глобальную переменную. Вернуть из функции, например, нельзя $hdb = NULL; // выполнить соединение с БД function login( $host,  // строка соединения $login, // имя пользователя $passw  // пароль ) {     global $hdb;     // пытаемся соедениться с БД     if( hytech_errno() != 0 ) {         $hdb = hytech_connect( $host, $login, $passw );     } else {         $hdb = hytech_pconnect( $host, $login, $passw );     }     if( $hdb != NULL ) {         //    Внимание! Вот так         //    if( hytech_errno() != 0 )         //    проверять ошибку нельзя, поскольку hytech_pconnect         //    не сбрасывает последнюю ошибку         return true;     }     return false; } // получить результаты запроса в массиве // возвращаемый массив состоит из двух элементов // 0 - ой элемент - массив структур с описанием полей //        количество элементов равно количеству полей, //        возвращаемых в запросе // 1 - ый элемент - массив строк таблицы, //        сформированный в результате запроса function get_result( $sql,     // текст SQL-запроса $cntrow // максимальное количество строк, извлекаемое // в результате запроса ) {     global $hdb;     // выполняем запрос     $rh = hytech_query( $sql, $hdb, $cntrow, 1 );     if( hytech_errno() != 0 ) {         // генерация исключения в случае ошибки         throw new Exception( gen_error_message($sql) );         return NULL;     }     $cnt = hytech_num_fields( $rh );     $row = hytech_num_rows( $rh );     // читаем информацию о полях     for($i = 0; $i < $cnt; $i++) {         $afld[] = hytech_field_info( $rh, $i );     }     // читаем строки результата     for($i = 0; $i < $row && $i < $cntrow; $i++) {         $arow[] = hytech_fetch_array( $rh, $i );     }     // освобождаем курсор     hytech_free_result( $rh );     return array( $afld, $arow ); } // выполнить SQL-запрос без возврата результата function exec_sql( $sql    // текст SQL-запроса ) {     global $hdb;     hytech_exec( "clearerr(); ".$sql.       " retcode( lastsqlerr() );",     $hdb );     if( (@hytech_errno() != 0) or (@hytech_retcode() != 0) ) {         throw new Exception( gen_error_message($sql) );         return NULL;     } } // возвращаем true, если в результате запроса // не извлекается ни одной строки и false в противном случае function isempty_data( $sql // текст SQL-запроса ) {     try {         $ar = get_result( $sql, 1 );     } catch (Exception $e) {         // обрабатываем ошибку         // выведем сообщение об ошибке         echo $e->getMessage();         // завершаем генерацию страницы         exit;     }     foreach( $ar[1] as $res ) {         return false;     }     return true; } // создать текст сообщения об ошибке, возвращаемого // при ошибке исполнения запроса function gen_error_message( $sql  // текст SQL-запроса ) {     $s = "<br>При выполнении запроса<br>".$sql."<br>".          "произошла ошибка. <br>";     $er = hytech_errno();     $s = $s."Номер ошибки HyTech: $er<br>";     return $s; } ?>

Для работы с БД используются функции: login, get_result, exec_sql и isempty_data. Комментарии к функциям даны в тексте.