Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL]Cudzysłów w BLOB a php, problemy z kodowaniem
pi_wo
post 3.04.2009, 11:49:57
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $check_query = 'SELECT * FROM tabela WHERE kolumna1=\"'.iconv('windows-1250','UTF-8', trim($row[0])).'\" AND kolumna2=\"'.iconv('windows-1250','UTF-8', trim($row[1])).'\"';
  3.  
  4. $check_result = mysql_query($check_query);
  5.                        
  6. if($check_result){
  7.                        
  8.       if(mysql_num_rows($check_result)<1){
  9. $row = explode('=',$file_array[$i]);
  10.  
  11. $query = &#092;"INSERT INTO tabela(kolumna1,kolumna2) VALUES('\".iconv(\"windows-1250\",\"UTF-8\", trim($row[0])).\"','\".iconv(\"windows-1250\",\"UTF-8\", trim($row[1])).\"';
  12. mysql_query($query);
  13.  
  14.       }
  15.  
  16. }
  17. ?>


Jest to fragment zawiłej pętli importującej dane z pliku do tabeli. kolumna 1 i 2 to pola BLOB (musi być BLOB). Dane przed wpisaniem do tabeli konwertowane są do UTF-8. Przed każdym wpisem skrypt sprawdza czy podany rekord już nie istnieje w bazie...

Jaki mam problem? W wierszach, które importuje, czasami występuje cudzysłów " . O ile w przypadku INSERT'a nie ma problemu z wpisaniem " cudzysłowia do tabeli i późniejszym wyświetleniem go to np.

  1. SELECT * FROM tabela WHERE kolumna1 LIKE '%"%';


lub jak w moim przypadku:


  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE kolumna1=\"'.$string_zawierający_cudzysłów.'\"';
  3. ?>



nie działa już poprawnie. Dlatego stosowane przeze mnie sprawdzanie czy rekord już nie istnieje w tabeli ($check_result) nie pozwala na wpisanie rekordu. Widzicie gdzieś błąd? Ja już za długo patrzę na ten kod...

Ten post edytował pi_wo 3.04.2009, 11:51:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post 3.04.2009, 11:52:04
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE kolumna1=''.$string_zawierający_cudzysłów.''';
  3. ?>

A jak teraz?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pi_wo
post 3.04.2009, 12:48:37
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 3.04.2009, 12:52:04 ) *
  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE kolumna1=''.$string_zawieraj&#261;cy_cudzysłów.''';
  3. ?>

A jak teraz?

To ja odpowiem merytorycznie:

thumbsupsmileyanim.gif yahoo.gif guitar.gif

Ten post edytował pi_wo 3.04.2009, 12:49:30
Go to the top of the page
+Quote Post
nospor
post 3.04.2009, 12:53:35
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale to nie koniec. Teraz niech twoja zmienna zawiera ' - znowu sie wykrzaczy tongue.gif

Musisz escapowac dane: mysql_escape_string()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pi_wo
post 3.04.2009, 13:03:58
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 3.04.2009, 13:53:35 ) *
No ale to nie koniec. Teraz niech twoja zmienna zawiera ' - znowu sie wykrzaczy tongue.gif

Musisz escapowac dane: mysql_escape_string()


Oczywiście, że mam i takie przypadki smile.gif Możesz przybliżyć co dokładnie robi ta funkcja ?


This function will escape the unescaped_string , so that it is safe to place it in a mysql_query()


  1. <?php
  2. $check_query = 'SELECT * FROM tabela WHERE kolumna1=\"'.iconv('windows-1250','UTF-8', trim($row[0])).'\" AND kolumna2=\"'.iconv('windows-1250','UTF-8', trim($row[1])).'\"';
  3. ?>


Czy ten zapis załatwi sprawę ?

Ten post edytował pi_wo 3.04.2009, 13:06:12
Go to the top of the page
+Quote Post
nospor
post 3.04.2009, 13:05:26
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




nie: \"
a: \'
patrz dokladnie co pisalem.

tak, powinno teraz zalatwic sprawe


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pi_wo
post 3.04.2009, 13:09:03
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 3.04.2009, 14:05:26 ) *
nie: \"
a: \'
patrz dokladnie co pisalem.

tak, powinno teraz zalatwic sprawe


tak \' , skopiowałem kod z pierwszego post'a (stąd ten błąd). Z drugiej strony czy przy mysql_escape_string - czy ma znaczenie czy to jest \"
czy \'
Go to the top of the page
+Quote Post
nospor
post 3.04.2009, 13:15:16
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




oczywiscie ze ma, jak nie dasz to ci poleci parse error:
  1. <?php
  2. echo 'to jest źle ' zleeee';
  3. echo 'to jest dobrze &#092;' brzeee';
  4. echo "to jest dobrze ' brzeee";
  5. echo 'to jest dobrze " brzeee';
  6. ?>

poczytaj troche w manualu o stringach

ps: durne bbcode popsulo mi \'


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.06.2025 - 22:42