И тут всё встало на свои места :)
Причина вот этой ошибки:
PHP код:
[ERROR] COrm::UpdateKeyValue - inserted id is zero
В том, что у тебя столбец vip_id не имеет параметра AUTO_INCREMENT, из-за чего новая строка и создаётся со значением 0, что не совсем верно для MySQL
Вот этот код:
PHP код:
vip[playerid][vip_day] = 86400 * day;
vip[playerid][v_id] = player[playerid][player_unique_id];
vip[playerid][v_level] = level;
orm_setkey(vip[playerid][vip_orm], "vip_id");
orm_insert(vip[playerid][vip_orm]);
В результате сформирует вот такой запрос (можно в логах посмотреть, если прописать в OnGameModeInIt "mysql_log(ALL);":
PHP код:
INSERT INTO `vips` (`vip_level`,`vip_days`) VALUES ('уровень','дни')
То бишь, значение vip_id не будет учитываться, так как этот столбец установлен в качестве уникального ключа.
Что бы всё работало как надо, нужно создать дополнительный столбец, который и будет являться идентификатором строк.
Вот тебе готовый запрос
Открыть/закрыть
PHP код:
DROP TABLE IF EXISTS vips;
CREATE TABLE vips (
row_id int(11) NOT NULL,
vip_id int(11) NOT NULL,
vip_level int(11) NOT NULL,
vip_days int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE vips
ADD PRIMARY KEY (row_id);
ALTER TABLE vips
MODIFY row_id int(11) NOT NULL AUTO_INCREMENT;
Так же нужно это поле занести в ORM:
PHP код:
enum VIP_DATA
{
ORM: vip_orm,
v_level,
vip_day,
v_id,
v_rid
};
PHP код:
public OnPlayerSpawn(playerid)
{
if(IsPVarSet(playerid, "_adsss_connect")
&& player[playerid][player_status] == PLAYER_STATUS_LOGGED)
{
new ORM:ormid = vip[playerid][vip_orm] = orm_create("vips");
orm_addvar_int(ormid, vip[playerid][v_rid], "row_id");
vip[playerid][v_id] = player[playerid][player_unique_id];// Если этого не сделать, orm_select будет искать vip_id со значением 0
orm_addvar_int(ormid, vip[playerid][v_id], "vip_id");
orm_addvar_int(ormid, vip[playerid][v_level], "vip_level");
orm_addvar_int(ormid, vip[playerid][vip_day], "vip_days");
orm_setkey(ormid, "vip_id");
orm_select(ormid, "CheckPlayerForVip", "i", playerid);
DeletePVar(playerid, "_adsss_connect");
}
#if defined adsv_OnPlayerSpawn
return adsv_OnPlayerSpawn(playerid);
#else
return 1;
#endif
}
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn adsv_OnPlayerSpawn
#if defined adsv_OnPlayerSpawn
forward adsv_OnPlayerSpawn(playerid);
#endif
И уже в самой команде устанавливай в качестве ключа новый столбец:
PHP код:
orm_setkey(vip[playerid][vip_orm], "row_id");
orm_insert(vip[playerid][vip_orm]);
Если я ничего не забыл, то всё должно работать
UPD: Вопрос решён Закрыто.