Hej Eksperter
(msql og C)
Jeg sidder og roder med en msql (MiniSql) database og er ved at
programmerer nogle udtrækninger fra databasen. Jeg har 3 tabeller
(brugertabel,websitetabel,weboversigttabel).
Udtrækningen sker i c på en linux med redhat(Skulle være uden
betydning)
Tabeller:
Brugertabel viser brugernr og password.
Websitetabel viser navne på hostnavne (www adr)samt hvor mange hits de
i alt har opnået.
Weboversigttabel er en mange til mange, og viser hvor hvilke sider
brugeren har besøgt samt antal gange brugeren har været der.
Jeg skal lave et kald og få det skrevet ud med nogle html tags. (Det
med HTML bliver gjort i en anden funktion, og er ikke væsenligt her).
Mit sql kald går fint igennem databasen hvis jeg skriver det direkte
derinde, men herfra får jeg 0 rækker som svar, på trods af at jeg skal
have 2. (int status viser hele tiden hvor mange resultater jeg får).
Kaldet returnere først nul...sevfølgelig, og derfefter -1 (skulle være
2)
status = 0;
printf("1.a: %d\n",status);
status = msqlQuery(socket,SqlTemp);
printf("1.b: %d\n",status);
Hvorfor... er der noget galt med at skrive sql sætningen på den måde i
c (den virker jo direkte)?
Jeg har en lignende funktion der gør det samme med en anden udtrækning
som virker (den er slået fra så længe jeg tester denne).
Kaldet fra main:
char Htmltemp[1000];
char *Htmltemp_p = Htmltemp;
BrugerSamletHits(socket,Log,Htmltemp_p);
printf("Statestik over brugers websider: %s\n",Htmltemp_p);
Funktionen:
/* BRUGER Se brugerens samlede hits, sorteret i faldende
orden */
int BrugerSamletHits(int socket,char* Log,char
*StringSamRes_p)
// Log benyttes ikke endnu, der er
// givet en kostant i sql
{
char sqlTemp1[100];
char sqlTemp2[100];
char sqlTemp[400];
int status=0; //gemmer resultatet af antal
// udtraekninger i en forespoergsel
m_result *result; //gemmer data for den
// paagaeldende foresporgsel
int AntalKol=0; //opbevarer antallet af
// kolonner fra foresporgslen
int j, i;
m_row raekke;
char Temp1[100]; //opbevarer en websidens navn
// og dens hits, som er anfoert i databasen
char SamletRes[1000] = "\0";//opbevarer foresporgslen
sprintf(sqlTemp1,"select WE.Website,WO.AntalBesoeg
from WEBOVERSIGT as WO,WEBTABEL as WE ");
sprintf(sqlTemp2,"where WO.WebbrugerID=2 and
WO.WOWebID=WE.WebID ",sqlTemp1);
sprintf(sqlTemp3,"order by WO.AntalBesoeg desc \n");
//select WE.Website,WO.AntalBesoeg from WEBOVERSIGT
// as WO,WEBTABEL as WE where WO.WebbrugerID=2
//and WO.WOWebID=WE.WebID order by WO.AntalBesoeg
// desc \n "select saetning samlet"
printf("1.a: %d\n",status); //kontroler status
status = msqlQuery(socket,SqlTemp);
printf("1.b: %d\n",status); //kontroler status igen
result = msqlStoreResult();
AntalKol = msqlNumFields(result); //gemmer antallet
//af raekker i forespoergslen
printf("1.c: %d\n",status);//kontroler status igen
for (j = 0; j < status && j < 10; j++)
{
raekke = msqlFetchRow(result);
for (i=0; i < AntalKol; i++)
{
sprintf(Temp1, "%s\t", raekke[i]);
printf("2: %s\n",Temp1);
strcat(SamletRes,Temp1);
}
strcat(SamletRes,"\n");
}
strcat(SamletRes,"\0");
printf("3: %s\n",SamletRes);
strcpy(StringSamRes_p, SamletRes);
TilHtmlKode(StringSamRes_p, StringSamRes_p);
return 0;
}
|