UPDATE bank_accounts IF id = 2 THEN SET balance = balance + 20 ELSIF id = 1 THEN SET balance = balance - 20;
UPDATE bank_accounts SET balance=balance-20 WHERE id=1, balance=balance+40 WHERE id=2
Сам не пробовал, но в теории можно попробовать так:
1 вариант: pawn Код:
pawn Код:
|
UPDATE bank_accounts SET balance = (IF id = 2 THEN SET balance + 20 ELSIF id = 1 THEN SET balance - 20);
mysql_connect("localhost", "user", "db_name", "password", 3306, FALSE);//шестой параметр отвечает за автореконнект, отключаем его.
public OnQueryError(errorid, error[], callback[], query[], connectionHandle) {
if (errorid == CR_SERVER_LOST) {
connectionHandle = mysql_connect("localhost", "user", "db_name", "password", 3306, FALSE);
mysql_query(connectionHandle, "SET NAMES cp1251;", FALSE);
mysql_query(connectionHandle, "SET SESSION character_set_server='utf8';", FALSE);
}
}
public OnQueryError(errorid, error[], callback[], query[], connectionHandle) {
if (errorid == CR_SERVER_LOST) {
connectionHandle = mysql_connect("localhost", "user", "db_name", "password", 3306, FALSE);
mysql_query(connectionHandle, "SET NAMES cp1251;", FALSE);
mysql_query(connectionHandle, "SET SESSION character_set_server='utf8';", FALSE);
if (strlen(callback)) {
mysql_tquery(connectionHandle, query, callback);
} else {
ysql_query(connectionHandle, query, FALSE);
}
}
}
[20:41:03] CMySQLHandler::Query(UPDATE `players1` SET `Level`=0,`Admin`=0,`Cash`=300,`Helper`=0,`Exp`=135,`Tut`=1,`Register`=0,`DonateRank`=0,`UpgradePoint`=0,`ConnectTime`=0,`Sex`=1,`Age`=26 WHERE `Name`='Hector_Ramirez') - An error has occured. (Error ID: 2014, Commands out of sync; you can't run this command now) [20:41:03] >> mysql_query( Connection handle: 1 )
new src[512],name[MAX_PLAYER_NAME],EscapeName[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name)); mysql_real_escape_string(name, EscapeName); GetPlayerPos(playerid,PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y],PlayerInfo[playerid][pPos_z]); GetPlayerFacingAngle(playerid,PlayerInfo[playerid][pPos_f]); format(query,sizeof(query),"UPDATE `"PlayerTable"` SET "); format(src,sizeof(src),"`Level`=%d,",PlayerInfo[playerid][pLevel]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Admin`=%d,",GetAdminLevel(playerid)); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Cash`=%d,",PlayerInfo[playerid][pCash]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Helper`=%d,",PlayerInfo[playerid][pHelp]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Exp`=%d,",PlayerInfo[playerid][pExp]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Tut`=%d,",PlayerInfo[playerid][pTut]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Register`=%d,",PlayerInfo[playerid][pReg]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`DonateRank`=%d,",PlayerInfo[playerid][pDonateRank]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`UpgradePoint`=%d,",PlayerInfo[playerid][gPupgrade]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`ConnectTime`=%d,",PlayerInfo[playerid][pConnectTime]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Sex`=%d,",PlayerInfo[playerid][pSex]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Age`=%d",PlayerInfo[playerid][pAge]); strcat(query,src,sizeof(query)); format(src,sizeof(src)," WHERE `Name`='%s'",EscapeName); strcat(query,src,sizeof(query)); mysql_query(query);
Внезапно появилась проблема с плагином R5(https://sampforum.blast.hk/showthread.php?tid=56564). При апдейте аккаунтов появляется ошибка:
Код:
[20:41:03] CMySQLHandler::Query(UPDATE `players1` SET `Level`=0,`Admin`=0,`Cash`=300,`Helper`=0,`Exp`=135,`Tut`=1,`Register`=0,`DonateRank`=0,`UpgradePoint`=0,`ConnectTime`=0,`Sex`=1,`Age`=26 WHERE `Name`='Hector_Ramirez') - An error has occured. (Error ID: 2014, Commands out of sync; you can't run this command now) [20:41:03] >> mysql_query( Connection handle: 1 ) Код:
new src[512],name[MAX_PLAYER_NAME],EscapeName[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name)); mysql_real_escape_string(name, EscapeName); GetPlayerPos(playerid,PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y],PlayerInfo[playerid][pPos_z]); GetPlayerFacingAngle(playerid,PlayerInfo[playerid][pPos_f]); format(query,sizeof(query),"UPDATE `"PlayerTable"` SET "); format(src,sizeof(src),"`Level`=%d,",PlayerInfo[playerid][pLevel]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Admin`=%d,",GetAdminLevel(playerid)); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Cash`=%d,",PlayerInfo[playerid][pCash]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Helper`=%d,",PlayerInfo[playerid][pHelp]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Exp`=%d,",PlayerInfo[playerid][pExp]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Tut`=%d,",PlayerInfo[playerid][pTut]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Register`=%d,",PlayerInfo[playerid][pReg]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`DonateRank`=%d,",PlayerInfo[playerid][pDonateRank]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`UpgradePoint`=%d,",PlayerInfo[playerid][gPupgrade]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`ConnectTime`=%d,",PlayerInfo[playerid][pConnectTime]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Sex`=%d,",PlayerInfo[playerid][pSex]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"`Age`=%d",PlayerInfo[playerid][pAge]); strcat(query,src,sizeof(query)); format(src,sizeof(src)," WHERE `Name`='%s'",EscapeName); strcat(query,src,sizeof(query)); mysql_query(query); |
У меня это заняло меньше минуты использования гугла по тексту ошибки: A.2.12 Ошибка в клиенте Commands out of sync
Почему бы в следующий раз не попробовать поискать самому? |
Я видел это, выше конкретный код, там один лишь вызов запроса, как может быть неверный порядок?
|
Это может произойти, например, если используется mysql_use_result() и делается попытка выполнить новый запрос до того, как вызвана mysql_free_result(), или если клиент пытается выполнить два возвращающих данные запроса без обращения к mysql_use_result() либо mysql_store_result() в промежутке между ними. |
Я не про это, вы когда в таблицу свои данные вставляли, в данных был указан ID или нет?
|
Можно ли добавлять индекс прямо во время работы с базой? То-есть, когда сервер к ней подключен. Из-за этого проблем не будет?
|
Можно ли добавлять индекс прямо во время работы с базой? То-есть, когда сервер к ней подключен. Из-за этого проблем не будет?
|
Только если он не занять и следующие его значения так же свободны!
|
Если при последующем добавлении строк ключ окажется занят таблица сломается. Поэтому я всегда говорю одно и то же - НЕ ТРОГАЕТЕ ВЫ ЭТО ПОЛЕ!
|
UPDATE table SET name='vasya',id='1' WHERE name='lena',id='3' |
UPDATE table SET name='lena',id='3' WHERE name='vasya',id='1' |