Pourquoi ai-je la même colonne deux fois dans mon PHP | Requête PostgreSQL? [dupliquer]
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 id
de 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 id
mais avec un identificateur de clé différent (dans ce cas, l'index). Qu'est-ce que je fais de mal ici?
Réponses
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_BOTH
ce 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]
);