PDA

Просмотр полной версии : [Вопрос] Переменная не сохраняет значение 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;
}

Буду весьма признателен, если вы подскажите, что я делаю не так.

Redsan
18.03.2017, 04:36
Как объявлена переменная 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);

Redsan
18.03.2017, 04:59
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];
просто я счёл, что нет необходимости это отправлять в виду того, что без данного массива я просто не смог бы скомпилировать мод.

DeimoS
18.03.2017, 10:54
???


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 просто не принимает значение.

DeimoS
18.03.2017, 12:28
Дай полный код того, как всё обстоит сейчас (включая запрос, объявление переменных и т.п.)

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;
}

DeimoS
18.03.2017, 13:46
Всё дело в том, что ты используешь запрос, который будет обрабатываться 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);