|
| % 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
| |
|
|