Perché ricevo due volte la stessa colonna nel mio PHP | Query PostgreSQL? [duplicare]

Aug 18 2020

Ho un database Postgres da cui recupero i dati con uno script PHP. All'interno di questo script mi ​​collego tramite PDO:

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

Quindi, ho una query che dovrebbe elencare solo il iddi ogni istanza:

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

Quindi ottengo il risultato della mia query:

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

E infine, stampo i miei risultati:

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

Ora il mio problema è che ottengo un array di due valori nel mio browser per ciascuno $row, anche se sto solo chiedendo di tornare id:

array (2) {["id"] => stringa (3) "GNQ" [0] => stringa (3) "GNQ"}

Quindi in qualche modo ottengo un secondo valore, di nuovo con il idma con un identificatore di chiave diverso (in quel caso l'indice). Cosa sto facendo di sbagliato qui?

Risposte

1 deoomen Aug 18 2020 at 05:51

Restituisce due volte lo stesso valore a causa del tipo di recupero PDO. L'impostazione predefinita è PDO::FETCH_BOTHche significa "colonne di ritorno come indicizzate da 0 e con nomi". Se vuoi restituire solo indici con nome, aggiungi il quarto parametro al costruttore PDO con un array di opzioni (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]
);