Avatar billede orpheus Nybegynder
18. maj 2011 - 14:46 Der er 16 kommentarer og
1 løsning

MySQL udtræk indeholdende apostrof

Hej alle

Jeg sætter tekst ind i MySQL med mysql_real_escape_string($Txt) i tilfælde af apostrof og det står rigtigt i databasen: "Who\'s afraid of", men når jeg laver en count:

echo mysql_result(mysql_query("select count(ID) from TABLE where Txt = 'Who\'s afraid of'"),0);

får jeg et 0.

Hvad skal der til for at den finder rækken?

Pft
Avatar billede erikjacobsen Ekspert
18. maj 2011 - 15:22 #1
Er du så ikke kommet til at lave en escape for meget med \

I databasen skal der kun stå:  "Who's afraid of"
Avatar billede orpheus Nybegynder
18. maj 2011 - 15:26 #2
Jeg har nu kun en escape i koden, kan der være noget auto escape på, sådan at min escape bliver anden gang?
Avatar billede orpheus Nybegynder
18. maj 2011 - 15:36 #3
Jeg har prøvet at fjerne min mysql_real_escape_string og nu står det rigtigt "Who's afraid of" i databasen, men pga af apostrof får jeg en Warning: mysql_result(): supplied argument is not a valid MySQL result resource in...
Avatar billede repox Seniormester
18. maj 2011 - 16:41 #4
Jeg mistænker magic quotes er enabled.
Avatar billede orpheus Nybegynder
18. maj 2011 - 17:03 #5
Ja, det er den, kan jeg se. Hvad skal jeg så skrive for at få min count til at give det rigtige resultat?
Avatar billede repox Seniormester
18. maj 2011 - 17:41 #6
Du skal i hvert fald have styr på hvilke data du smider i databasen uanset om det er INSERTs eller SELECTs. Det gør du ved at sikre dig at magic_quotes ikke anvendes. Hvilken PHP version bruger du?

Anyhuu - ser her for at disable magic_quotes: http://www.php.net/manual/en/security.magicquotes.disabling.php
Avatar billede orpheus Nybegynder
18. maj 2011 - 18:22 #7
Om jeg selv kan slå den fra ved jeg ikke lige, der skal jeg vist lige have fat på DLX
Avatar billede repox Seniormester
18. maj 2011 - 18:33 #8
Der er forslag til hvordan du kan gøre det uden at involvere din udbyder på samme side.
Avatar billede erikjacobsen Ekspert
18. maj 2011 - 19:12 #9
Du bør i dit PHP-program spørge på om magic_quotes er sat, og så fjerne med strip_slashes.

Derefter bør du altid, altid bruge prepared statements.

Skal du selv skrive en streng med en ' i, skal du sætte en \ foran, ganske som du selv skrev først:


echo mysql_result(mysql_query("select count(ID) from TABLE where Txt = 'Who\'s afraid of'"),0);
Avatar billede orpheus Nybegynder
18. maj 2011 - 19:33 #10
PHP 5

@erikj
Du mener at når der skal sættes ind i table så skal jeg skrive:
insert into TABLE ('Txt') values ('Who\' afraid of')
Avatar billede orpheus Nybegynder
18. maj 2011 - 19:34 #11
Hov, der manglede lige et s
Avatar billede erikjacobsen Ekspert
18. maj 2011 - 19:46 #12
Ja, hvis du vil skrive i SQL-strengen. Men ellers brug prepared statements med fx mysqli-funktionerne.
Avatar billede orpheus Nybegynder
18. maj 2011 - 19:55 #13
mysqli-funktioner kender jeg slet ikke, så det tjekker jeg lige op på :)
Avatar billede orpheus Nybegynder
19. maj 2011 - 12:52 #14
Nå, mysqli kræver vist lidt mere tid :) Den proces jeg skal have til at virke lige nu er:

...
<input type=text name=Txt value="Who\'s afraid of"> // og her skal jeg så skrive \'s(?).
...
...
mysql_query("insert into TABLE (Txt) values ('$Txt'); // vises i Db: "Who\'s afraid of".
...

Er jeg med så langt?
Avatar billede erikjacobsen Ekspert
19. maj 2011 - 21:23 #15
Hvad med at bruge den tid, det tager at lære prepared statements med mysqli?.

Nej, du skal aldrig selv skriv et \'

Det er et problem at PHP "sommetider" selv sætter en \ foran '  -  det er noget rod.

Ideelt set arbejder du aldrig på strenge med \' i - lige med undtagelse af ved opbygningen af SQL-sætningen.
Avatar billede orpheus Nybegynder
26. maj 2011 - 14:09 #16
OK, selvom det kniber lidt med tiden her, så vil jeg gå i krig med det, så vil jeg vende tilbage hvis det stadig kniber :) Tak for det. Smid et svar...
Avatar billede orpheus Nybegynder
30. september 2011 - 00:19 #17
Nå, intet svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester