Il semble que lorsque j'ai une fonction mysql_real_query() dans une boucle while continue, la requête sera exécutée OK. Cependant, si plusieurs mysql_real_query() sont dans la boucle while, l'une après l'autre. En fonction de la requête, il arrive que ni la première requête ni la deuxième requête ne s'exécutent correctement.multiple mysql_real_query() dans while loop
Cela me semble être un problème de threading. Je me demande si le mysql c api a une façon de gérer cela? Est-ce que quelqu'un sait comment faire face à cela? mysql_free_result() ne fonctionne pas car je ne stocke pas les résultats.
//keep polling as long as stop character '-' is not read
while(szRxChar != '-')
{
// Check if a read is outstanding
if (HasOverlappedIoCompleted(&ovRead))
{
// Issue a serial port read
if (!ReadFile(hSerial,&szRxChar,1,
&dwBytesRead,&ovRead))
{
DWORD dwErr = GetLastError();
if (dwErr!=ERROR_IO_PENDING)
return dwErr;
}
}
// Wait 5 seconds for serial input
if (!(HasOverlappedIoCompleted(&ovRead)))
{
WaitForSingleObject(hReadEvent,RESET_TIME);
}
// Check if serial input has arrived
if (GetOverlappedResult(hSerial,&ovRead,
&dwBytesRead,FALSE))
{
// Wait for the write
GetOverlappedResult(hSerial,&ovWrite,
&dwBytesWritten,TRUE);
//load tagBuffer with byte stream
tagBuffer[i] = szRxChar;
i++;
tagBuffer[i] = 0; //char arrays are \0 terminated
//run query with tagBuffer
if(strlen(tagBuffer)==PACKET_LENGTH)
{
sprintf(query,"insert into scan (rfidnum) values ('");
strcat(query, tagBuffer);
strcat(query, "')");
mysql_real_query(&mysql,query,(unsigned int)strlen(query));
i=0;
}
mysql_real_query(&mysql,"insert into scan (rfidnum) values ('2nd query')",(unsigned int)strlen("insert into scan (rfid) values ('2nd query')"));
mysql_free_result(res);
}
}
est votre deuxième requête vraiment un autre insert? – Alnitak
Oui, j'ai essayé à la fois d'insérer et de sélectionner. Si c'est un select, il semble que rien ne soit inséré à partir de la première requête. S'il s'agit d'un insert, un seul tuple sera inséré. – Steve
mysql_free_res ne doit être utilisé que sur le résultat d'une requête qui produit des données de ligne. "inserts" ne le font pas. – Alnitak