/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
% tegnet forsvinder i mysql_query.
Fra : news.tele2.dk


Dato : 29-04-04 03:00

Hejsa.

Jeg har lavet en mysql query der ser således ud:
char *Query = new char[1000];
sprintf(Query, "GRANT ALL PRIVILEGES ON openbsd.* TO '%s'@'%' IDENTIFIED BY
'%s' WITH GRANT OPTION;",busername,bpassword);

Problemet er at når jeg kører min Query så bliver % fjernet i hostname delen
og jeg kan dermed ikke give brugeren adgang til databasen fra alle steder i
verden, nogle der ved hvordan jeg gør dette? Evt om jeg skal bruge et
special tegn for at lave det. \x25 ændrer desværre ikke ved noget.

\% gør heller ikke og %% gør ej heller.

Nogen forslag?



 
 
Søren Hansen (29-04-2004)
Kommentar
Fra : Søren Hansen


Dato : 29-04-04 09:46

On Thu, 29 Apr 2004 03:59:39 +0200, news.tele2.dk wrote:

> Hejsa.
>
> Jeg har lavet en mysql query der ser således ud:
> char *Query = new char[1000];
> sprintf(Query, "GRANT ALL PRIVILEGES ON openbsd.* TO '%s'@'%' IDENTIFIED BY
> '%s' WITH GRANT OPTION;",busername,bpassword);
>
> Problemet er at når jeg kører min Query så bliver % fjernet i hostname delen
> og jeg kan dermed ikke give brugeren adgang til databasen fra alle steder i
> verden, nogle der ved hvordan jeg gør dette? Evt om jeg skal bruge et
> special tegn for at lave det. \x25 ændrer desværre ikke ved noget.
>
> \% gør heller ikke og %% gør ej heller.


%% burde gøre tricket, men gør den virkelig ikke det, så gør sådan:
sprintf(Query, "GRANT ALL PRIVILEGES ON openbsd.* TO '%s'@'%c' IDENTIFIED
BY '%s' WITH GRANT OPTION;",busername, '%', bpassword);

Det er noget klyt, men det virker.

--
Salu2, Søren.

Lasse Stig Thomsen (29-04-2004)
Kommentar
Fra : Lasse Stig Thomsen


Dato : 29-04-04 15:37


> %% burde gøre tricket, men gør den virkelig ikke det, så gør sådan:
> sprintf(Query, "GRANT ALL PRIVILEGES ON openbsd.* TO '%s'@'%c' IDENTIFIED
> BY '%s' WITH GRANT OPTION;",busername, '%', bpassword);
>
> Det er noget klyt, men det virker.
>
> --
> Salu2, Søren.


Hmmm umiddelbart får jeg en runtime error ved det der noget refrence til en
hukommelse's ting. Men jeg har fundet ud af at hvis jeg skriver %%%% istedet
for bare % så får jeg mit ene % tegn frem, nogle der kan forklare hvorfor?
Og om det evt er forkert?

MVH: Lasse Stig Thomsen



Richard Flamsholt (29-04-2004)
Kommentar
Fra : Richard Flamsholt


Dato : 29-04-04 20:07

"Lasse Stig Thomsen" <lasse@tt-trading.dk> skrev:
>hvis jeg skriver %%%% istedet for bare % så får jeg mit ene % tegn frem

Det passer nok ikke helt. Det tyder snarere på, at Query bruges som
format-streng i sprintf eller printf endnu en gang bagefter. Altså:

sprintf(Query, "a%%%%b") => Query indeholder nu "a%%b"
printf(Query); => vil udskrive "a%b", fordi %% printf'es som %

Man skal aldrig bruge en streng med ukendt indhold (som fx username og
password) direkte som en format-streng, for så fortolkes alle %'er jo.
Dvs at fx password="ups%s!" sikkert vil crashe programmet.

Den rette vej er derimod printf("%s", Query);

--
Richard Flamsholt
richard@flamsholt.dk - www.richard.flamsholt.dk

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408877
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste