Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL]Cudzysłów w BLOB a php
Forum PHP.pl > Forum > Przedszkole
pi_wo
  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...
nospor
  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE kolumna1=''.$string_zawierający_cudzysłów.''';
  3. ?>

A jak teraz?
pi_wo
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
nospor
No ale to nie koniec. Teraz niech twoja zmienna zawiera ' - znowu sie wykrzaczy tongue.gif

Musisz escapowac dane: mysql_escape_string()
pi_wo
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ę ?
nospor
nie: \"
a: \'
patrz dokladnie co pisalem.

tak, powinno teraz zalatwic sprawe
pi_wo
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 \'
nospor
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 \'
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.