Просмотр полной версии : [Вопрос] Переменная не сохраняет значение cache_insert_id
Danil_Cage
18.03.2017, 03:41
Доброго времени суток. Я не первый день, пытаюсь вытащить последний ид, сгенерированный AUTO_INCREMENT из БД. Но выходит лишь вывести его в консоль:
format(query, sizeof(query), "INSERT INTO `Battle` (type) VALUES ('1')");
mysql_function_query(connects, query, "test", "i");
public test()
{
printf("%d",cache_insert_id());//этот момент срабатывает
idB = cache_insert_id();//а этот нет
return 1;
}
Буду весьма признателен, если вы подскажите, что я делаю не так.
Как объявлена переменная idB? Как вы проверяете записанный в нее id?
Danil_Cage
18.03.2017, 04:49
Как объявлена переменная idB? Как вы проверяете записанный в нее id?
new idB;
format(probtxt, sizeof(probtxt), "n %d " idB);
SendClientMessage(i, COLOR_WHITE, probtxt);
new idB;
format(probtxt, sizeof(probtxt), "n %d " idB);
SendClientMessage(i, COLOR_WHITE, probtxt);
Так должно работать:
new probtxt[11];
format(probtxt, sizeof(probtxt), "n %d", idB);
SendClientMessage(i, COLOR_WHITE, probtxt);
Danil_Cage
18.03.2017, 05:06
Так должно работать:
new probtxt[11];
format(probtxt, sizeof(probtxt), "n %d", idB);
SendClientMessage(i, COLOR_WHITE, probtxt);
:smile: у меня безусловно имеется
new probtxt[11];
просто я счёл, что нет необходимости это отправлять в виду того, что без данного массива я просто не смог бы скомпилировать мод.
???
format(query, sizeof(query), "INSERT INTO `Battle` (type) VALUES ('1')");
mysql_function_query(connects, query, "test", "i");
public test()
{
idB = cache_insert_id();
printf("%d", idB);//этот момент срабатывает
return 1;
}
Danil_Cage
18.03.2017, 12:05
???
format(query, sizeof(query), "INSERT INTO `Battle` (type) VALUES ('1')");
mysql_function_query(connects, query, "test", "i");
public test()
{
idB = cache_insert_id();
printf("%d", idB);//этот момент срабатывает
return 1;
}
К великому сожалению, данный вариант тоже не помогает. idB просто не принимает значение.
Дай полный код того, как всё обстоит сейчас (включая запрос, объявление переменных и т.п.)
Danil_Cage
18.03.2017, 12:39
Дай полный код того, как всё обстоит сейчас (включая запрос, объявление переменных и т.п.)
new idB;
format(query, sizeof(query), "INSERT INTO `Battle` (type) VALUES ('1')");
mysql_function_query(connects, query, "test", "i");
new probtxt[144];//извиняюсь за магию
format(probtxt, sizeof(probtxt), "n %d ", idB);
SendClientMessage(i, COLOR_WHITE, probtxt);
public test()
{
idB = cache_insert_id();
printf("%d", idB);//этот момент срабатывает
return 1;
}
Всё дело в том, что ты используешь запрос, который будет обрабатываться MySQL в отдельном потоке и из-за этого вот этот код:
new probtxt[144];
format(probtxt, sizeof(probtxt), "n %d ", idB);
SendClientMessage(i, COLOR_WHITE, probtxt);
Обработается раньше, нежели MySQL вернёт данные о созданной строке => ID строки ещё не запишется в переменную.
Нужно использовать однопоточный запрос в этом случае:
new idB;
format(query, sizeof(query), "INSERT INTO `Battle` (type) VALUES ('1')");
mysql_query(connects, query);
idB = cache_insert_id();
new probtxt[144];
format(probtxt, sizeof(probtxt), "n %d ", idB);
SendClientMessage(i, COLOR_WHITE, probtxt);
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot