Por que estou recebendo a mesma coluna duas vezes no meu PHP | Consulta PostgreSQL? [duplicado]

Aug 18 2020

Eu tenho um banco de dados Postgres do qual recupero dados com um script PHP. Dentro deste script eu conecto por meio do PDO:

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

Então, eu tenho uma consulta que deve listar apenas o idde cada instância:

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

Então estou obtendo o resultado da minha consulta:

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

E, finalmente, imprimo meus resultados:

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

Agora, meu problema é que obtenho uma matriz de dois valores em meu navegador para cada um $row, embora eu esteja apenas pedindo para retornar id:

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

De alguma forma, estou obtendo um segundo valor, novamente com o, idmas com um identificador de chave diferente (nesse caso, o índice). O que eu estou fazendo errado aqui?

Respostas

1 deoomen Aug 18 2020 at 05:51

Ele retorna o mesmo valor duas vezes por causa do tipo de busca PDO. O padrão é o PDO::FETCH_BOTHque significa "retornar colunas como indexadas de 0 e com nomes". Se você quiser retornar apenas índices nomeados, basta adicionar o quarto parâmetro ao construtor PDO com uma série de opções (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]
);