¿Por qué obtengo la misma columna dos veces en mi PHP? ¿Consulta PostgreSQL? [duplicar]

Aug 18 2020

Tengo una base de datos de Postgres de la que recupero datos con un script PHP. Dentro de este script me conecto a través de PDO:

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

Luego, tengo una consulta que debería enumerar el idde cada instancia:

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

Entonces obtengo el resultado de mi consulta:

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

Y finalmente, imprimo mis resultados:

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

Ahora mi problema es que obtengo una matriz de dos valores en mi navegador para cada uno $row, aunque solo pido regresar id:

matriz (2) {["id"] => cadena (3) "GNQ" [0] => cadena (3) "GNQ"}

Entonces, de alguna manera, obtengo un segundo valor, nuevamente con el idpero con un identificador de clave diferente (en ese caso, el índice). ¿Qué estoy haciendo mal aquí?

Respuestas

1 deoomen Aug 18 2020 at 05:51

Devuelve el mismo valor dos veces debido al tipo de recuperación de PDO. El valor predeterminado es lo PDO::FETCH_BOTHque significa "devolver columnas como indexadas desde 0 y con nombres". Si desea devolver solo índices con nombre, simplemente agregue el cuarto parámetro al constructor PDO con una matriz de opciones (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]
);