Dlaczego w moim PHP | Zapytanie PostgreSQL? [duplikować]

Aug 18 2020

Mam bazę danych Postgres, z której pobieram dane za pomocą skryptu PHP. Wewnątrz tego skryptu łączę się przez PDO:

$connection = new PDO('pgsql:host=' . $host . ';dbname=' . $database, $username, $password);

Następnie mam zapytanie, które powinno po prostu wyświetlić listę idkażdej instancji:

$query = 'SELECT id FROM my_table WHERE "myCondition" = TRUE';

Wtedy otrzymuję wynik mojego zapytania:

$result = $connection->prepare($query) or die($connection->error);
$result-> execute();

Na koniec drukuję wyniki:

foreach($result AS $row) { echo var_dump($row);
};

Teraz mój problem polega na tym, że w przeglądarce otrzymuję tablicę dwóch wartości dla każdej z nich $row, mimo że proszę tylko o zwrot id:

tablica (2) {["id"] => ciąg (3) "GNQ" [0] => ciąg (3) "GNQ"}

W jakiś sposób otrzymuję drugą wartość, ponownie z, idale z innym identyfikatorem klucza (w tym przypadku indeksem). Co ja tu robię źle?

Odpowiedzi

1 deoomen Aug 18 2020 at 05:51

Zwraca tę samą wartość dwukrotnie ze względu na typ pobierania PDO. Domyślnie oznacza PDO::FETCH_BOTHto „zwraca kolumny indeksowane od 0 i z nazwami”. Jeśli chcesz zwrócić tylko nazwane indeksy, po prostu dodaj czwarty parametr do konstruktora PDO z tablicą opcji (https://www.php.net/manual/en/pdo.construct.php).

$connection = new PDO( 'pgsql:host=' . $host . ';dbname=' . $database, $username, 
    $password, 
    [\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_OBJ]
);