w bazie danych mam trzy pola typu CLOB z poziomu php probuje zapisac do bazy te pola, dane jakie chce wrzucic to pola clob to dane typu string
  1. <?php
  2. @$stmt=ociparse($connection, $sql) or die (writeError($connection,$mode,$sql,$php_errormsg));
  3.   if(isset($pola_clob)){
  4.       $m=0;
  5.     foreach($pola_clob as $key2 => $value)
  6.     {
  7.      $clob[$m]= OCINewDescriptor($connection, OCI_D_LOB);
  8.      OCIBindByName($stmt,"$key2",&$clob[$m],-1, OCI_B_CLOB);
  9.         $clob[$m]->WriteTemporary($pola_clob[$key2],OCI_TEMP_CLOB);
  10.      $m++;  
  11.      $err = OCIError($stmt);
  12.      if($err)
  13.      print "Error:". $err['code']." ".$err['message'];      
  14.     }
  15.    }
  16.    @$ile_rekordow=ociexecute($stmt, $mode) or die (writeError($connection,$mode,$sql,$php_errormsg));
  17. ?>


wszystko jest ok ale mam rozne kodowanie po stronie www i inne po stronie bazy danych, przed zapisem robie konwersje znakow, jednak po zapisie za pomoca tego kodu powstaja w bazie danych krzaczki.

w rozwiazaniu problemu pomoglo mi uproszczenie kodu

  1. <?php
  2. @$stmt=ociparse($connection, $sql) or die (writeError($connection,$mode,$sql,$php_errormsg));
  3.  
  4.  
  5. if(isset($pola_clob)){
  6.  
  7. foreach($pola_clob as $key2 => $value)
  8.  
  9. {
  10.  
  11.  
  12. OCIBindByName($stmt,$key2,$pola_clob[$key2]);
  13.  
  14.  
  15. $err = OCIError($stmt);
  16.  
  17. if($err)
  18.  
  19. print "Error:". $err['code']." ".$err['message'];
  20.  
  21. }
  22.  
  23. }
  24.  
  25. @$ile_rekordow=ociexecute($stmt, $mode) or die (writeError($connection,$mode,$sql,$php_errormsg));
  26. ?>




Moje pytanie to takie czy ktos orietuje sie moze dlaczeko w pierwszym rozwiazaniu byl problem z polskimi znakami a w drugim nie ma, czy w tym pierwszym nastepuje jakas kolejna walidacja konwersja, czy ma znaczenie tam kodowanie znakow.?

Jesli ktos sie zetknal z podobnym problemem to prosze o info.