Pourquoi ai-je la même colonne deux fois dans mon PHP | Requête PostgreSQL? [dupliquer]

Aug 18 2020

J'ai une base de données Postgres à partir de laquelle je récupère des données avec un script PHP. Dans ce script, je me connecte via PDO:

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

Ensuite, j'ai une requête qui devrait simplement lister le idde chaque instance:

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

Ensuite, j'obtiens le résultat de ma requête:

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

Et enfin, j'imprime mes résultats:

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

Maintenant, mon problème est que j'obtiens un tableau de deux valeurs dans mon navigateur pour chacune $row, même si je ne demande que de retourner id:

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

Donc, d'une manière ou d'une autre, j'obtiens une deuxième valeur, encore une fois avec le idmais avec un identificateur de clé différent (dans ce cas, l'index). Qu'est-ce que je fais de mal ici?

Réponses

1 deoomen Aug 18 2020 at 05:51

Il renvoie la même valeur deux fois en raison du type de récupération PDO. La valeur par défaut est PDO::FETCH_BOTHce qui signifie «retourner les colonnes comme indexées à partir de 0 et avec des noms». Si vous souhaitez renvoyer uniquement les index nommés, ajoutez simplement le quatrième paramètre au constructeur PDO avec un tableau d'options (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]
);