Nazwy kolumn w rekordzie wielkimi literami

0

Dobry wieczór.
Wbrew pozorom pewnie wątek prosty ale nie dla mnie. Nie mam bladego pojęcia - o wielu rzeczach w php-ie, a potrzebuje to zrozumieć.
o co chodzi:
Oto prosty przykład problemu: (przepraszam, jeżeli nie jest to czysty i poprawny kod ale piszę z pamięci...)

$db = pg_connect( "host=localhost user=postgres password=postgres dbname=wprawka port=5432");
$gry = pg_query($db, 'select id, nazwa, wiek from personel');
$row = pg_fetch_assoc($db, $qry);
echo "wynik = " .row['ID']. .row['NAZWA']. .row['WIEK'].;   // powoduje napis "wynik=" i dalej pusto... 
echo "wynik = ".row['id']. .row['nazwa']. .row['wiek'].;   // powoduje napis "wynik=" wypisuje wartości poprawne... 

Dowiedziałem się, że funkcje postgresowe zwracają rekord z kluczami opisanymi małymi literami...

W necie znalazłem przykład zastosowania takie prostego rozwiązania zamiany klucza z dużymi literami:

foreach ($row as $key => $value) {
  $key = strToUpper($key);
}

Ale nie wiem jak to napisać poprawnie by wyszło coś w ten deseń:

$row = ZamienKlucze(pg_fetch_assoc($db, $qry));

wesprze ktoś laika?

pozdrowienia i przepraszam za kłopot.

1

@zoltodziub_z_phpu:

Dziwę się, że przykładasz znaczenie do tych wielkich liter? Z jakiego powodu?
Ja nie widzę najmniejszego

PS. przez ó z kreską

0

@zoltodziub_z_phpu: Nie wnikam czemu chcesz zmieniać nazwy kluczy na duże litery (co raczej jest mało spotykane) ale nawiązując do Twojego problemu to w pętli foreach zmieniasz TYLKO nazwę klucza ale nic więcej z nim nie robisz. Wrzuć do tej pętli coś takiego:

$row[strtoupper($key)] = $value; // wrzucamy zawartość pod "nowy" klucz
unset($array[$key]);             // usuwamy "starą" zawartość
1

Skoro robisz:

select id, nazwa, wiek from personel

to się nie dziw, że dostajesz takie same klucze. Dostajesz to co masz w SELECT.

Można stosować aliasy, ale nie wiem jak to wyjdzie ze zmianą tylko wielkości liter:

SELECT id as "ID", nazwa as "NAZWA", wiek as "WIEK" FROM personel

I wtedy powinieneś mieć jako klucze duże litery.

0

W przypadku postgresa częstym pierwszym doświadczeniem użytkownika jest "Nie mogę podłączyć się do bazy".

  1. https://www.php.net/manual/en/function.pg-pconnect.php

Sprawdź czy pg_connect podłączyło Cię do bazy, czyli czy to $db zawiera coś innego niż false.

  1. Zgodnie z https://www.php.net/manual/en/function.pg-query.php

If an error occurs, and false is returned, details of the error can be retrieved using the pg_last_error() function if the connection is valid.

Może nie łączy Cię do bazy, dostajesz nic i w efekcie nie ma tam oczekiwanych kluczy.

1

Z jakiegoś powodu chcesz zmapować wszystkie klucze na wielkie litery. Nie mam bladego pojęcia po co chcesz to zrobić, nie ma to specjalnego sensu jak dla mnie, nie widzę czemu ktokolwiek miałby to robić, ale jeśli już musisz, to masz dwa wyjścia. Albo je zmapować w PHP, albo je takie zwrócić z Postgresa:

  1. Zmapowanie w PHP (bardzo podobne do Twojego kodu):
    $mappedRow = [];
    foreach ($row as $key => $value) {
       $mappedRow[strToUpper($key)] = $value;
    }
    
    teraz w $mappedRow masz klucze wielkimi literami.
  2. Zwrócenie ich takich z postgresa - zrób takie query:
    pg_query($db, 'SELECT id as ID, nazwa as NAZWA, wiek as WIEK FROM personel');
    
1

Może tu odpowiem tak: Ktoś napisał projekt dla baz Firebirda. FB w wynikach zawsze zwraca nazwy kluczy z dużymi literami. Cały projekt więc odnosi się do "nazewnictwa" "dużymi literami". Poprawiać wszędzie ? No właśnie chciałem tego uniknąć... Ale nie wiem jak to zrobić. W czymkolwiek innym bym to zrobił bez problemu. Sęk w tym, że do języków skryptowych mam zawsze 2 lewe ręce... ale trzeba w końcu jakoś się przełamać przez tą trudność... — zoltodziub_z_phpu dziś, 03:46

I co, do końca świata będziesz konwertował, bo projekt genetycznie miał FB w swojej przeszłości?

I tak musisz dotknąć każdy moduł żródlowy, bo używasz najstarszego interfejsu do bazy danych, gdzie do każdej bazy są inne funkcje.

BTW to mi każe wątpić w wartośc użytkową tego projektu, bo i tak dostanie w czapę ze względu na niekompatybilności PHP, a v.7 iv.8 to duuuże zmiany.
Są projekty, których nie warto wyjmować ze śmietnika.

Co do baz, olbrzymia wiekszość daje nazwy kolumn takie, jak w selekcie. Że Firebird ma dziwoląga ...

zoltodziub_z_phpu napisał(a):

$row = pg_fetch_assoc($db, $qry);

Ja bym (bym -> jakbym przestał wymiotować) doprowadził do
$row = My_pg_fetch_assoc($db, $qry);

Choć to załatwia tylko problem odczytów, a kilku problemów nie załatwia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1