Nikako da mi upit za bazu proradi kako treba...
Naime u bazu ubacujem html a posto nisam nasao u c++-u funkciju koja dodaje backslashes pa sam napravio svoju koja samo dodaje \ ispred sledecih znakova:
' " \ NULL
Evo kako proveravam i ubacujem:
char *s1="'";
char *s2="\"";
char *s3="\\";
for(i=0;i<n;i++)
{
if(s1[0]==mem.memory[i])
{
izlaz.ubaci("\\");
}
if(s2[0]==mem.memory[i])
{
izlaz.ubaci("\\");
}
if(mem.memory[i]==NULL)
{
izlaz.ubaci("\\");
}
if(s3[0]==mem.memory[i])
{
izlaz.ubaci("\\");
}
izlaz.ubaci(mem.memory[i]);
}
Ovo mem je struktura:
struct MemoryStruct {
char *memory;
size_t size;
};
ali to nije ni bitno.
Problem je sto sve dobro radi kad unosim neke HTML stranice a za neke program puca. Npr. www.mycity.rs, www.google.com, www.php.net se ubacuju u bazu bez problema dok na primer elitesecurity i www.b92.net prave probleme. Program ih nekako i ubaci u bazu ali odmah nakon unosa puca i sto je najgore ne prijavljuje gresku a stavio sam sledeci kod da se osiguram:
sprintf_s(qbuf,INSERT_QUERY,nbr,url,iz1);
if(mysql_query(sock,qbuf))
{
fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
}
u qbuf promenljivoj se smesta upit i to sam proverio i ispada ok.
Napravio sam i slican kod u php-u samo za b92 i skinuto je bez problema tako da mislim da problem nije u bazi vec u ovoj mojoj addslashes funkciji.
Dopuna: 12 Feb 2007 12:04
Umalo da zaboravim...
Ovo je prosto ali me zbunjuje. Ne umem da izvucem podatak koji mi treba iz baze. Evo koda:
MYSQL_RES *res;
if(mysql_query(sock,COUNT_QUERY))
{
fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
}
if (!(res=mysql_store_result(sock)))
{
fprintf(stderr,"Couldn't get result from %s\n",
mysql_error(sock));
}
int nbr=(int)res->row;
Ovde je COUNT_QUERY "SELECT COUNT(*) FROM table"
znaci samo da mi prebroji redove ali ono sto dobijam u promenljivoj res->row uopste nije to.
|