4. Функции a_sampdb.inc
Давайте ознакомимся с функциями для управления базой данных:
db_open(name[]); - функция используется для подключения к базе данных. В качестве name указывается путь к файлу .db и его
имя. В случае успешного подключения эта функция вернет нам значение особой переменной типа DB
PHP код:
#define DBNAME "MyDATA.db" // определяем неизменное имя файла ...
// ... базы данных, если назвать его так, то он будет находиться в папке scriptfiles ...
// ... Можно было написать и так: new DBNAME = "MyDATA.db";
new DB:ServerDB; // объявляем особую переменную типа Data Base
Далее пишем в OnGameModInit
PHP код:
OnGameModInit()
{
ServerDB = db_open(DBNAME); // подключаемся к базе данных, ...
// ... особая переменная ServerDB теперь определена, подключение выполнено!
// продолжение паблика OnGameModInit
return 1;
}
db_close(DB:db); - функция используется для отключения от базы данных
PHP код:
OnGameModExit()
{
db_close(ServerDB);
// продолжение паблика OnGameModExit
return 1;
}
Примечания: Я рекомендую не отключаться от базы данных на протяжении всей работы мода!
db_query(DB:db,query[]); - функция используется для отправки запросов (см. пункт 3) SQLite-серверу, и возвращает результат в виде особой переменной DBResult. Все следующие функции которые мы рассмотрим будут работать именно с DBResult.
PHP код:
new DBResult:TEST; // объявляем переменную типа DBResult ( Результат запроса )
TEST = db_query(ServerDB, "SELECT id, name, pass FROM players WHERE lvl = 40"); //
В результате содержится двумерный массив в котором 3 столбца и 4 строки (см. рисунок ниже)
Рисунок 4 - зеленым отмечены ячейки выбранные из таблицы, это и есть результат А вот как выглядит сам результат запроса:
Рисунок 5 - результат запроса
db_free_result(DBResult:dbresult); - функция очищает результат запроса
PHP код:
db_free_result(TEST); // в TEST теперь нет ни строк ни столбцов =(
db_num_rows(DBResult:dbresult); - функция проверяет результат запроса и возвращает количество строк в нем
PHP код:
new DBResult:TEST; // объявляем переменную типа DBResult ( Результат запроса )
TEST = db_query(ServerDB, "SELECT id, name, pass FROM players WHERE lvl = 40"); //
// В результате содержится двумерный массив в котором 3 столбца и 4 строки (см. рисунок 5)
new Nrows = db_num_rows(TEST); // Nrows будет равно 4
printf("Я нашел %d строк в результате запроса!", Nrows); // выводим сообщение в ...
//консоль сервера. Там будет следующее: "Я нашел 4 строк в результате запроса!"
db_num_fields(DBResult:dbresult); - функция проверяет результат запроса и возвращает количество столбцов в нем
PHP код:
new DBResult:TEST; // объявляем переменную типа DBResult ( Результат запроса )
TEST = db_query(ServerDB, "SELECT id, name, pass FROM players WHERE lvl = 40"); //
// В результате содержится двумерный массив в котором 3 столбца и 4 строки (см. рисунок 5)
new Nfield = db_num_fields(TEST); // Nfield будет равно 3
printf("Я нашел %d столбцов в результате запроса!", Nfield); // выводим сообщение в ...
//консоль сервера. Там будет следующее: "Я нашел 3 столбцов в результате запроса!"
db_next_row(DBResult:dbresult); - функция для переключения на следующую строку результата. Сразу после того как мы получили результат запроса, он переключен на 0 строку (см. рисунок 5), и теперь указав номер (или имя) столбца мы получим значение ячейки.
Например указав столбец номер 1 мы получим значение ячейки 'OFFREAL', а если потом один раз воспользуемся db_next_row, то получим '[EPG]_KOT'
Примечания: Чаще всего в запросах SELECT (см. выше) используют LIMIT 1 и получают результаты в которых только одна строка, но много столбцов, и использовать db_next_row не приходится.
db_field_name(DBResult:dbresult, field, result[], maxlength); - функция возвращает имя столбца результата запроса по номеру этого столбца
PHP код:
new f_name[32]; // объявляем переменную для имени столбца
new DBResult:TEST; // объявляем переменную типа DBResult ( Результат запроса )
TEST = db_query(ServerDB, "SELECT id, name, pass FROM players WHERE lvl = 40");
db_field_name(TEST, 2, f_name, 32); // хотим узнать имя 2 столбца результата запроса
printf("Имя второго столбца: %s",f_name); // выводим сообщение в консоль сервера
// там будет: "Имя второго столбца: pass"
db_get_field(DBResult:dbresult, field, result[], maxlength);
и
db_get_field_assoc(DBResult:dbresult, const field[], result[], maxlength);
- функции получают значение ячейки которая находится на пересечении указанного в них столбца (field или field[]) и строки на которую переключен результат запроса (см. описание db_next_row).
В db_get_field указывается номер столбца (параметр field),
а в db_get_field_assoc указывается имя столбца (параметр field[])
Пример: требуется получить значение ячейки (строка 0, столбец 1) результата запроса
PHP код:
new DBResult:TEST; // объявляем переменную типа DBResult ( Результат запроса )
TEST = db_query(ServerDB, "SELECT id, name, pass FROM players WHERE lvl = 40"); // рисунок 5
// результат сейчас переключен на 0 строку
new var[128]; // объявляем переменную, которая будет хранить значения ячеек результата
db_get_field(TEST, 1, var, 128); // получаем значение ячейки результата (столбец 1, строка 0)
printf("Значение ячейки 1: %s", var); // выводим в консоль сервера
// там будет: "Значение ячейки 1: OFFREAL"
db_get_field(TEST, 0, var, 128); // получаем значение ячейки результата (столбец 0, строка 0)
printf("Значение ячейки 0: %s", var); // выводим в консоль сервера
// там будет: "Значение ячейки 0: 1"
Примечания: Эти две функции получают содержимое ячеек только в текстовом формате, и для преобразования некоторых значений в числа надо использовать strval или floatstr
- - - - - -
Спасибо всем кто прочитал до конца xD
Надеюсь, ваше понимание SQLite стало более ясным
Задавайте свои вопросы по этой теме, я постараюсь на них ответить!
[ Второй урок по SQLite ]