Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][PostgreSQL] pg_fetch_field ?
Forum PHP.pl > Forum > Przedszkole
jigsaw
Przerabiam bazę danych MySQL na PostgreSQL, mam następującą funkcję w PHP obsługującą bazę MySQL:

  1. function _mysql_fetch_array($result)
  2. {
  3. $table_result=array();
  4. $r=0;
  5. while($row = mysql_fetch_assoc($result)){
  6. $arr_row=array();
  7. $c=0;
  8. while ($c < mysql_num_fields($result)) {
  9. $col = mysql_fetch_field($result, $c);
  10. $arr_row[$col -> name] = $row[$col -> name];
  11. $c++;
  12. }
  13. $table_result[$r] = $arr_row;
  14. $r++;
  15. }
  16. return $table_result;
  17. }


która musi działać analogicznie na bazie PostgreSQL:

  1. function _pg_fetch_array($result)
  2. {
  3. $table_result=array();
  4. $r=0;
  5. while($row = pg_fetch_assoc($result)){
  6. $arr_row=array();
  7. $c=0;
  8. while ($c < pg_num_fields($result)) {
  9. $col = pg_fetch_field($result, $c);
  10. $arr_row[$col -> name] = $row[$col -> name];
  11. $c++;
  12. }
  13. $table_result[$r] = $arr_row;
  14. $r++;
  15. }
  16. return $table_result;
  17. }


niestety w PHP nie ma funkcji pg_fetch_field. W jaki sposób można rozwiązać jej brak? Funkcja _pg_fetch_array($result) musi zwracać tablicę o identycznej strukturze jak funkcja _mysql_fetch_array($result)
everth
Może czas pomyśleć o PDO? Skoro teraz już masz klocki z funkcjami to co będzie jak projekt się rozrośnie?
jigsaw
czas smile.gif ale powyższą sprawę muszę jakoś rozwiązać...
everth
Hmm a co ci jest potrzebne z pól tego fetch_field? Może stworzysz jaką prostą klasę implementującą niektóre pola obiektu wynikowego mysql_fetch_field i napiszesz funkcję pg_fetch_field implementującą niektóre właściwości mysql_fetch_field za funkcji pq_*. Trochę to przekombinowane a pewnych pól i tak nie uzyskasz, ale skoro nie możesz użyć PDO to jedyne co przychodzi mi do głowy.

EDIT: Tak sobie jeszcze pomyślałem że gdyby była możliwość przeciążania funkcji wbudowanych w PHP to można by napisać funkcje implementujące starą bazę danych za pomocą PDO (taka warstwa wstecznej zgodności), ale niestety to raczej nie wchodzi w grę :/.
jigsaw
  1. function _pg_fetch_array($result)
  2. {
  3. $table_result=array();
  4. $r=0;
  5. while($row = pg_fetch_assoc($result)){
  6. $arr_row=array();
  7. $c=0;
  8. while ($c < pg_num_fields($result)) {
  9. [b]$col = pg_field_name($result, $c);[/b]
  10. $arr_row[$col] = $row[$col];
  11. $c++;
  12. }
  13. $table_result[$r] = $arr_row;
  14. $r++;
  15. }
  16. return $table_result;
  17. }


rozwiązane smile.gif nie doczytałem manuala dokładnie winksmiley.jpg
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.