What's new

Skrypty & Kody query_insert.setQuery

Status
Not open for further replies.

Oskar

Forum friend
Joined
Jan 24, 2009
Messages
2,256
Reaction score
331
Mamy:
[cpp] Database* db = Database::getInstance();
DBQuery query;
DBInsert query_insert(db);
char buffer[280];

query.str("");
query << "DELETE FROM `player_invicible_npc` WHERE `player_id` = " << player->getGUID();
if(!db->executeQuery(query.str()))
return false;

query_insert.setQuery("INSERT INTO `player_invicible_npc` (`player_id`, `npc_id`, `value`) VALUES ");
for(int32_t i = 0; i <= 10; ++i)
{
std::string npcName = player->invisibleNPCListName != "" ? player->invisibleNPCListName : "false";
uint32_t value = player->invisibleNPCListActive ? player->invisibleNPCListActive : 0;

std::cout << npcName << " - " << value << std::endl;
sprintf(buffer, "%u, %s, %u", player->getGUID(), npcName.c_str(), value);
if(!query_insert.addRow(buffer))
return false;
}

if(!query_insert.execute())
return false;[/cpp]

Dop?ki pr?buj? zapisywa? w formacie string (c.str()) to pokazuje si? w konsoli b??d:
mysql_real_query(): INSERT INTO `player_invicible_npc` (`player_id`, `npc_id`, `value`) VALUES (2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0) - MYSQL ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, , 0),(2, ' at line 1 (1064)
Ale gdy zmieni? kodowanie string na int, wtedy wszystko gra poprawnie, nawet je?li w bazie danych pod t? kolumn? mo?na zapisywa? tylko format tekstowy.
Dlaczego?
 

Gandhi

Active User
Joined
Aug 7, 2013
Messages
80
Reaction score
19
Odp: query_insert.setQuery

Siema Oskar!

[cpp]sprintf(buffer, "%u, %s, %u", player->getGUID(), npcName.c_str(), value);[/cpp]


Spr?buj zamieni? %s na %q (%q to string w cudzys?owach). Ewentualnie zamie? na "%u, \"%s\", %u". Najprawdopodobniej wywala Ci b??d, bo escape-ujesz stringa bez cudzys?ow?w, a wiesz, ?e string bez cudzys?ow?w w SQL to b??d (np. "SELECT * FROM `players` WHERE `name` = Gandhi")

Pozdrowionka.
 
Last edited:

Oskar

Forum friend
Joined
Jan 24, 2009
Messages
2,256
Reaction score
331
Odp: query_insert.setQuery

Siemasz Rahim, je?li dobrze zapami?ta?em!
Mia?e? racj?. Nie uczy?em si? nigdy SQL i nie mia?em poj?cia, ?e cudzys?owie jest tak wa?ne i rzeczywi?cie. Po zmianie, wed?ug Twoich wytycznych, dzia?a wszystko doskonale. Dzi?ki!
 
Status
Not open for further replies.
Top