ORM в SA-MP (MySQL плагин от pBlueG)
ORM
(англ. Object-Relational Mapping, рус. объектно-реляционное отображение, или преобразование)
- ORM - технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». © Википедия
Если же говорить по-простому, то ORM можно назвать своеобразной прослойкой между Вашим скриптом и Базой Данных (далее: БД). В эту прослойку заложен ряд функций, которые способны собирать простенькие запросы по заранее заложенным шаблонам, вставляя данные, которые Вы заранее укажите для вставки, создавая экземпляр ORM (подробнее ниже).
Как и у всего, у данной реализации есть как плюсы, так и минусы, и вот основная их часть:
- Плюсы:
- Уменьшен риск допущения ошибок в запросах, так как они генерируются автоматически, а имена столбцов указываются в одном месте
(применимо только до тех пор, пока Вам не потребуется составить какой-то более сложный запрос, для реализации которого придётся прибегнуть к обычным функциям работы с кэшем) - Более компактный код (следовательно, скорость разработки немного увеличится)
- Нет нужды дополнительно изучать SQL (до тех пор, пока вам не понадобиться написать более сложные запросы, на которые не способна ORM)
- Все запросы автоматически обрабатываются в отдельном потоке
- Минусы:
- Нельзя составлять сложные условия для выборки данных (проверять несколько столбцов одновременно).
- При отправке update запроса, обновляются все данные, внесённые в экземпляр ORM (нельзя обновить конкретный столбец).
- Существует потеря в производительности, так как в системе присутствуют дополнительные проверки того, какие данные Вы вносите и т.п.
- Так же существует потеря в производительности из-за того, что некоторые функции и защиты для запросов SQL пришлось обособить для всех данных (например, ORM экранирует все строки, дабы избежать SQL-инъекции, хотя далеко не во всех случаях это нужно)
*Вы так же можете указать на тот или иной плюс/минус использования ORM и я включу его в статью
Настало время определиться с тем, что же такое «экземпляр ORM».
Перед тем, как начать работать с данными в таблице, Вы должны сообщить ORM системе имя таблицы, с которой нужно работать, и указать нужные столбцы, сопоставив каждому глобальную переменную из скрипта, куда данные будут записываться при загрузке и откуда данные будут изыматься при обновлении таблицы. Эта совокупность данных и называется экземпляром ORM.
Ну а теперь перейдём к описанию функционала, при помощи которого мы можем управлять ORM системой и "общаться" с ней.
- Создание экземпляра ORM:
PHP код:
native ORM:orm_create(const table[], MySQL:handle = MYSQL_DEFAULT_HANDLE);
- Уничтожение экземпляра ORM:
PHP код:
native orm_destroy(ORM:id);
- Регистрация целочисленной переменной для экземпляра ORM:
PHP код:
native orm_addvar_int(ORM:id, &var, const columnname[]);
- Описание:
Функция orm_addvar_int регистрирует целочисленную переменную, связывая её с указанным столбцом в таблице, к которой привязан экземпляр ORM.
Примечание: Зарегистрировать можно только глобальную переменную, так как плагин не выделяет на своей стороне какой-либо памяти для хранения данных, а лишь записывает адрес указанной переменной, впоследствии обращаясь к ней же. Локальные переменные хранятся в стэке, который отчищается после обработки сегмента кода, в котором была объявлена переменная. Соответственно, хранить данные в локальной переменной на постоянной основе для ORM не представляется возможным.
Так же стоит отметить, что в Pawn нет возможности передать по ссылке адрес конкретного байта (можно передать лишь адрес ячейки), поэтому использование char переменных (напр: "array{idx}") не представляется возможным.
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
&var - Целочисленная переменная, которая будет хранить нужные для хранения в таблице данные
const columnname[] - Столбец из таблицы, к которой привязан экземпляр ORM, в который будут хранится данные для переменной
Возвращаемые значения: |
Пояснение: |
1 |
Регистрация переменной прошла успешно |
0 |
Зарегистрировать переменную не удалось
(напр: указан несуществующий столбец) |
- Пример использования:
PHP код:
enum e_PLAYER_INFO
{
pORM_ID,
pAccountID,
pMoney,
/* ... */
};
new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
public OnPlayerConnect(playerid)
{
new ORM:ormid = pInfo[playerid][pORM_ID] = orm_create("accounts", mysql_connection_ID);
//Зарегистрируем две целочисленные переменные
orm_addvar_int(ormid, pInfo[playerid][pAccountID], "account_id");
orm_addvar_int(ormid, pInfo[playerid][pMoney], "player_money");
/* ... */
return 1;
}
public OnPlayerDisconnect(playerid)
{
/* ... */
orm_destroy(pInfo[playerid][pORM_ID]);
/* ... */
return 1;
}
- Регистрация вещественной переменной для экземпляра ORM:
PHP код:
native orm_addvar_float(ORM:id, &Float:var, const columnname[]);
- Регистрация переменной с текстом для экземпляра ORM:
PHP код:
native orm_addvar_string(ORM:id, var[], var_maxlen, const columnname[]);
- Описание:
Функция orm_addvar_string регистрирует переменную, хранящую текст, связывая её с указанным столбцом в таблице, к которой привязан экземпляр ORM.
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
var[] - Массив, который будет хранить нужный для хранения в таблице текст
var_maxlen - Размер регистрируемого массива
const columnname[] - Столбец из таблицы, к которой привязан экземпляр ORM, в который будут хранится данные для массива
Возвращаемые значения: |
Пояснение: |
1 |
Регистрация массива прошла успешно |
0 |
Зарегистрировать массив не удалось
(напр: указан несуществующий столбец) |
- Пример использования:
PHP код:
const MAX_PLAYER_PASSWORD = 128;
enum e_PLAYER_INFO
{
pName[MAX_PLAYER_NAME],
pPassword[MAX_PLAYER_PASSWORD+1],
pORM_ID,
pAccountID,
pMoney,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
/* ... */
};
new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
public OnPlayerConnect(playerid)
{
new ORM:ormid = pInfo[playerid][pORM_ID] = orm_create("accounts", mysql_connection_ID);
orm_addvar_int(ormid, pInfo[playerid][pAccountID], "account_id");
orm_addvar_int(ormid, pInfo[playerid][pMoney], "player_money");
orm_addvar_float(ormid, pInfo[playerid][pPosX], "last_pos_x");
orm_addvar_float(ormid, pInfo[playerid][pPosY], "last_pos_y");
orm_addvar_float(ormid, pInfo[playerid][pPosZ], "last_pos_z");
//Зарегистрируем два массива
orm_addvar_string(ormid, pInfo[playerid][pName], MAX_PLAYER_NAME, "account_name");
orm_addvar_string(ormid, pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD+1, "account_password");
/* ... */
return 1;
}
public OnPlayerDisconnect(playerid)
{
/* ... */
orm_destroy(pInfo[playerid][pORM_ID]);
/* ... */
return 1;
}
- Обнуление переменных, зарегистрированных в экземпляре ORM:
PHP код:
native orm_clear_vars(ORM:id);
- Описание:
Функция orm_clear_vars устанавливает значение, равное нулю, для всех переменных, зарегистрированных ранее в экземпляре ORM.
Подробнее:
- Удаление ранее зарегистрированной переменной в экземпляре ORM:
PHP код:
native orm_delvar(ORM:id, const columnname[]);
- Установка зарегистрированной в экземпляре ORM переменной в качестве ключа:
PHP код:
native orm_setkey(ORM:id, const columnname[]);
- Описание:
Функция orm_setkey устанавливает ранее зарегистрированную переменную в качестве ключа.
Иными словами, выбранная переменная станет формировать условие выборки (всё, что находится после WHERE в обычном запросе).
Одновременно может быть установлена только одна переменная в качестве ключа.
Подробнее:
- Отправка запроса на выборку данных из таблицы в экземпляр ORM (загрузка данных):
PHP код:
native orm_select(ORM:id, const callback[] = "", const format[] = "", {Float, _}:...);
- Описание:
Функция orm_select формирует и отправляет запрос SELECT в таблицу для выгрузки данных в зарегистрированные переменные.
orm_load является полным аналогом функции orm_select
Запрос формируется по следующему шаблону:
PHP код:
SELECT
/* переменная_1 */,
/* переменная_2 */,
/* переменная_3 */,
/* все оставшиеся зарегистрированные переменные, кроме той, что установлена в качестве ключа */
FROM
/* таблица */
WHERE
/* имя столбца, установленного в качестве ключа*/ = /*текущее значение переменной, установленной в качестве ключа */
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
const callback[] = "" - Название коллбэка, в котором произойдёт обработка результата (опционально)
const format[] = "" - Список спецификаторов для параметров коллбэка (опционально)
{Float, _}:... - Значения, передаваемые в параметры коллбэка (опционально)
Возвращаемые значения: |
Пояснение: |
1 |
Запрос успешно отправлен |
0 |
Запрос не удалось отправить
(напр: указан ID не существующего экземпляра ORM) |
- Пример использования:
PHP код:
const MAX_PLAYER_PASSWORD = 128;
enum e_PLAYER_INFO
{
pName[MAX_PLAYER_NAME],
pPassword[MAX_PLAYER_PASSWORD+1],
pORM_ID,
pAccountID,
pMoney,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
/* ... */
};
new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
public OnPlayerConnect(playerid)
{
new ORM:ormid = pInfo[playerid][pORM_ID] = orm_create("accounts", mysql_connection_ID);
orm_addvar_int(ormid, pInfo[playerid][pAccountID], "account_id");
orm_addvar_int(ormid, pInfo[playerid][pMoney], "player_money");
orm_addvar_float(ormid, pInfo[playerid][pPosX], "last_pos_x");
orm_addvar_float(ormid, pInfo[playerid][pPosY], "last_pos_y");
orm_addvar_float(ormid, pInfo[playerid][pPosZ], "last_pos_z");
orm_addvar_string(ormid, pInfo[playerid][pName], MAX_PLAYER_NAME, "account_name");
orm_addvar_string(ormid, pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD+1, "account_password");
orm_clear_vars(ormid);
GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
orm_setkey(ormid, "account_name");
// Отправим запрос на выгрузку данных
/* Сгенерированный запрос будет выглядеть так:
SELECT `account_id`, `player_money`, `last_pos_x`, `last_pos_y`, `last_pos_z`, `account_password` FROM `accounts` WHERE `account_name` = 'Ник_из_переменной_pName'
*/
orm_select(pInfo[playerid][pORM_ID], "UploadPlayerAccount", "i", playerid);
/* ... */
return 1;
}
forward UploadPlayerAccount(playerid);
public UploadPlayerAccount(playerid)
{
/* ... */
// Изменим переменную ключа на ID аккаунта, дабы при каждом последующем запросе сравнивались числа, а не строки
orm_setkey(pInfo[playerid][pORM_ID], "account_id");
/*
Выгружать какие-либо данные вручную не нужно.
На момент вызова указанного Вами коллбэка (в данном случае это UploadPlayerAccount) все данные уже находятся в зарегистрированных переменных.
*/
/* ... */
return 1;
}
public OnPlayerDisconnect(playerid)
{
/* ... */
orm_destroy(pInfo[playerid][pORM_ID]);
/* ... */
return 1;
}
- Отправка запроса на обновление данных в таблице:
PHP код:
native orm_update(ORM:id, const callback[] = "", const format[] = "", {Float, _}:...);
- Описание:
Функция orm_update формирует и отправляет запрос UPDATE в таблицу для обновления данных в ней исходя из значений в зарегистрированных переменных (
обновляются сразу все переменные).
Запрос формируется по следующему шаблону:
PHP код:
UPDATE
/* таблица */
SET
/* столбец_1 */ = /* переменная_1 */,
/* столбец_2 */ = /* переменная_2 */,
/* столбец_3 */ = /* переменная_3 */,
/* все оставшиеся зарегистрированные столбцы/переменные, кроме той, что установлена в качестве ключа */
WHERE
/* имя столбца, установленного в качестве ключа*/ = /*текущее значение переменной, установленной в качестве ключа */
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
const callback[] = "" - Название коллбэка, в котором произойдёт обработка результата (опционально)
const format[] = "" - Список спецификаторов для параметров коллбэка (опционально)
{Float, _}:... - Значения, передаваемые в параметры коллбэка (опционально)
Возвращаемые значения: |
Пояснение: |
1 |
Запрос успешно отправлен |
0 |
Запрос не удалось отправить
(напр: указан ID не существующего экземпляра ORM) |
- Пример использования:
PHP код:
const MAX_PLAYER_PASSWORD = 128;
enum e_PLAYER_INFO
{
pName[MAX_PLAYER_NAME],
pPassword[MAX_PLAYER_PASSWORD+1],
pORM_ID,
pAccountID,
pMoney,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
/* ... */
};
new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
public OnPlayerConnect(playerid)
{
new ORM:ormid = pInfo[playerid][pORM_ID] = orm_create("accounts", mysql_connection_ID);
orm_addvar_int(ormid, pInfo[playerid][pAccountID], "account_id");
orm_addvar_int(ormid, pInfo[playerid][pMoney], "player_money");
orm_addvar_float(ormid, pInfo[playerid][pPosX], "last_pos_x");
orm_addvar_float(ormid, pInfo[playerid][pPosY], "last_pos_y");
orm_addvar_float(ormid, pInfo[playerid][pPosZ], "last_pos_z");
orm_addvar_string(ormid, pInfo[playerid][pName], MAX_PLAYER_NAME, "account_name");
orm_addvar_string(ormid, pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD+1, "account_password");
orm_clear_vars(ormid);
GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
orm_setkey(ormid, "account_name");
orm_select(pInfo[playerid][pORM_ID], "UploadPlayerAccount", "i", playerid);
/* ... */
return 1;
}
forward UploadPlayerAccount(playerid);
public UploadPlayerAccount(playerid)
{
/* ... */
orm_setkey(pInfo[playerid][pORM_ID], "account_id");
// В качестве примера изменим значения переменных и отправим запрос на обновление данных
pInfo[playerid][pMoney] = 50000;
pInfo[playerid][pPosX] = pInfo[playerid][pPosY] = pInfo[playerid][pPosZ] = 50.0; // Установим всем 3-м переменным значение `50.0`
/* Сгенерированный запрос будет выглядеть так:
UPDATE `accounts`SET `player_money`= '50000', `last_pos_x` = 50.0, `last_pos_y` = 50.0, `last_pos_z` = 50.0, `account_name` = 'значение_pName', `account_password` = 'значение_pPassword' WHERE `account_id` = /* текущее значение переменной pAccountID */
Как Вы могли заметить, после WHERE уже указан столбец "account_id", а не "account_name", так как мы изменили ключ
*/
orm_update(pInfo[playerid][pORM_ID]);
/* ... */
return 1;
}
public OnPlayerDisconnect(playerid)
{
/* ... */
orm_destroy(pInfo[playerid][pORM_ID]);
/* ... */
return 1;
}
- Отправка запроса на создание данных в таблице:
PHP код:
native orm_insert(ORM:id, const callback[] = "", const format[] = "", {Float, _}:...);
- Описание:
Функция orm_insert формирует и отправляет запрос INSERT в таблицу для создания данных в ней исходя из значений в зарегистрированных переменных.
Запрос формируется по следующему шаблону:
PHP код:
INSERT INTO
/* таблица */
(
/* столбец_1 */,
/* столбец_2 */,
/* столбец_3 */,
/* все оставшиеся зарегистрированные столбцы */
)
VALUES
(
/* переменная_1 */,
/* переменная_2 */,
/* переменная_3 */,
/* все оставшиеся зарегистрированные переменные */
)
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
const callback[] = "" - Название коллбэка, в котором произойдёт обработка результата (опционально)
const format[] = "" - Список спецификаторов для параметров коллбэка (опционально)
{Float, _}:... - Значения, передаваемые в параметры коллбэка (опционально)
Возвращаемые значения: |
Пояснение: |
1 |
Запрос успешно отправлен |
0 |
Запрос не удалось отправить
(напр: указан ID не существующего экземпляра ORM) |
- Пример использования:
PHP код:
const MAX_PLAYER_PASSWORD = 128;
enum e_PLAYER_INFO
{
pName[MAX_PLAYER_NAME],
pPassword[MAX_PLAYER_PASSWORD+1],
pORM_ID,
pAccountID,
pMoney,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
/* ... */
};
new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
public OnPlayerConnect(playerid)
{
new ORM:ormid = pInfo[playerid][pORM_ID] = orm_create("accounts", mysql_connection_ID);
orm_addvar_int(ormid, pInfo[playerid][pAccountID], "account_id");
orm_addvar_int(ormid, pInfo[playerid][pMoney], "player_money");
orm_addvar_float(ormid, pInfo[playerid][pPosX], "last_pos_x");
orm_addvar_float(ormid, pInfo[playerid][pPosY], "last_pos_y");
orm_addvar_float(ormid, pInfo[playerid][pPosZ], "last_pos_z");
orm_addvar_string(ormid, pInfo[playerid][pName], MAX_PLAYER_NAME, "account_name");
orm_addvar_string(ormid, pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD+1, "account_password");
orm_clear_vars(ormid);
GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
orm_setkey(ormid, "account_name");
// В качестве примера сразу же отправим запрос на создание нового аккаунта
// (более реальные примеры ищите в статье по созданию системы аккаунтов с использованием ORM, ссылку на которую прикреплю в конце статьи)
orm_insert(pInfo[playerid][pORM_ID], "OnPlayerRegistered", "i", playerid);
/* ... */
return 1;
}
public OnPlayerRegistered(playerid)
{
printf("Игрок %s зарегистрирован. ID аккаунта: %d", pInfo[playerid][pName], pInfo[playerid][pAccountID]);
return 1;
}
- Отправка запроса на удаление данных из таблицы:
PHP код:
native orm_delete(ORM:id, const callback[] = "", const format[] = "", {Float, _}:...);
- Описание:
Функция orm_delete формирует и отправляет запрос DELETE в таблицу для удаления данных из неё исходя из значения переменной, указанной в качестве ключа.
Запрос формируется по следующему шаблону:
PHP код:
DELETE FROM /* таблица */ WHERE /* имя столбца, установленного в качестве ключа */ = /*текущее значение переменной, установленной в качестве ключа */
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
const callback[] = "" - Название коллбэка, в котором произойдёт обработка результата (опционально)
const format[] = "" - Список спецификаторов для параметров коллбэка (опционально)
{Float, _}:... - Значения, передаваемые в параметры коллбэка (опционально)
Возвращаемые значения: |
Пояснение: |
1 |
Запрос успешно отправлен |
0 |
Запрос не удалось отправить
(напр: указан ID не существующего экземпляра ORM) |
- Пример использования:
PHP код:
const MAX_PLAYER_PASSWORD = 128;
enum e_PLAYER_INFO
{
pName[MAX_PLAYER_NAME],
pPassword[MAX_PLAYER_PASSWORD+1],
pORM_ID,
pAccountID,
pMoney,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
/* ... */
};
new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
public OnPlayerConnect(playerid)
{
new ORM:ormid = pInfo[playerid][pORM_ID] = orm_create("accounts", mysql_connection_ID);
orm_addvar_int(ormid, pInfo[playerid][pAccountID], "account_id");
orm_addvar_int(ormid, pInfo[playerid][pMoney], "player_money");
orm_addvar_float(ormid, pInfo[playerid][pPosX], "last_pos_x");
orm_addvar_float(ormid, pInfo[playerid][pPosY], "last_pos_y");
orm_addvar_float(ormid, pInfo[playerid][pPosZ], "last_pos_z");
orm_addvar_string(ormid, pInfo[playerid][pName], MAX_PLAYER_NAME, "account_name");
orm_addvar_string(ormid, pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD+1, "account_password");
orm_clear_vars(ormid);
GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
orm_setkey(ormid, "account_name");
// В качестве примера используем код из предыдущего примера
orm_insert(pInfo[playerid][pORM_ID], "OnPlayerRegistered", "i", playerid);
/* ... */
return 1;
}
public OnPlayerRegistered(playerid)
{
// И удалим только что созданную строку
orm_delete(Player[playerid][ORM_ID]);
/* Сгенерированный запрос будет выглядеть так:
DELETE FROM `accounts` WHERE `account_name` = 'значение_pName'
*/
return 1;
}
- Отправка запроса на обновление данных в таблице или создание этих данных, если ранее они не были созданы:
PHP код:
native orm_save(ORM:id, const callback[] = "", const format[] = "", {Float, _}:...);
- Описание:
Функция orm_save совмещает в себе функционал "orm_insert" и "orm_update".
То, какой именно запрос будет отправлен, зависит от того, имеется ли в переменной, указанной в качестве ключа, какое-либо значение или там указан нуль/пустая строка.
То бишь, если в качестве ключа установлена переменная pAccountID (целочисленная переменная) и её значение равно нулю (а в MySQL столбцы, имеющие атрибут AUTO_INCREMENT, который должен быть установлен у столбца "account_id", не могут иметь нулевое значение), то данная функция отправит запрос INSERT, создавая новую строку. Так же будет и в случае, если в качестве ключа установлен массив pName (переменная с текстом) и в нём не записано никакое значение. Если же в переменной ключа будет записано какое-либо значение, функция отправит запрос UPDATE
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
const callback[] = "" - Название коллбэка, в котором произойдёт обработка результата (опционально)
const format[] = "" - Список спецификаторов для параметров коллбэка (опционально)
{Float, _}:... - Значения, передаваемые в параметры коллбэка (опционально)
Возвращаемые значения: |
Пояснение: |
1 |
Запрос успешно отправлен |
0 |
Запрос не удалось отправить
(напр: указан ID не существующего экземпляра ORM) |
- Пример использования:
Данную функцию можно использовать вместо orm_update и orm_insert, если в Вашем коде предусмотрено обнуление значения ключа тогда, когда столбец не создан.
- Выгрузка данных из активного кэша в переменные экземпляра ORM:
PHP код:
native orm_apply_cache(ORM:id, row_idx, result_idx = 0);
- Описание:
Функция orm_apply_cache извлекает данные из кэша, помещая их в переменные экземпляра ORM.
Иными словами, Вы можете составить обычный запрос (пригодится, когда нужно сделать выборку по нескольким условиям, а не только по одному) и отправить его при помощи mysql_(t/p)query, а уже результат обрабатывать не через cache_get_value_index(...), а использовать данную функцию, которая сама запишет данные в нужные переменные.
Подробнее: - Параметры:
ORM:id[] - ID экземпляра ORM, возвращаемого функцией orm_create.
row_idx - Порядковый номер строки в кэше, из которого нужно получать данные (равносильно первому параметру в cache_get_value_index(...).)
result_idx - ID кэша, из которого нужно извлекать данные (опционально)
Возвращаемые значения: |
Пояснение: |
1 |
Данные успешно извлечены |
0 |
Данные не удалось извлечь
(напр: нет активного кэша) |
- Пример использования:
Первый пример (mysql_query):
PHP код:
new query[42+11+1];
format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `account_id` = %d", pInfo[playerid][pAccountID]);
new Cache:result = mysql_query(mysql_connection_ID, query_string, true);
if(!cache_num_rows())
{
cache_delete(result);
return print("Аккаунт не найден!");
}
orm_apply_cache(pInfo[playerid][pORM_ID], 0, result);
printf("Игрок %s имеет %d$ и находится в координатах %f,%f,%f", pInfo[playerid][pName], pInfo[playerid][pMoney], pInfo[playerid][pPosX], pInfo[playerid][pPosY], pInfo[playerid][pPosZ]);
cache_delete(result);
Второй пример (mysql_tquery):
PHP код:
new query[42+11+1];
format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `account_id` = %d", pInfo[playerid][pAccountID]);
mysql_tquery(mysql_connection_ID, query_string, "OnStuffSelected", "d", playerid);
public OnStuffSelected(playerid)
{
if(!cache_num_rows())
return print("Аккаунт не найден!");
orm_apply_cache(pInfo[playerid][pORM_ID], 0);
printf("Игрок %s имеет %d$ и находится в координатах %f,%f,%f", pInfo[playerid][pName], pInfo[playerid][pMoney], pInfo[playerid][pPosX], pInfo[playerid][pPosY], pInfo[playerid][pPosZ]);
return 1;
}
- Поиск ошибок в отправленном запросе ORM:
PHP код:
native E_ORM_ERROR:orm_errno(ORM:id);
Если есть какие-либо вопросы, прошу написать об этом в комментариях.
Автор статьи - DeimoS
Копирование данного материала без разрешения автора запрещено
Интересные статьи на подобную тему:
* [Урок] Создание системы регистрации на основе плагина MySQL [R39-R41] (ORM) (в разработке)