Mengapa saya mendapatkan kolom yang sama dua kali di PHP saya | Kueri PostgreSQL? [duplikat]

Aug 18 2020

Saya memiliki database Postgres tempat saya mengambil data dengan skrip PHP. Di dalam skrip ini saya terhubung melalui PDO:

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

Kemudian, saya memiliki kueri yang seharusnya mencantumkan idsetiap contoh:

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

Kemudian saya mendapatkan hasil dari kueri saya:

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

Dan akhirnya, saya mencetak hasil saya:

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

Sekarang masalah saya adalah saya mendapatkan array dua nilai di browser saya untuk masing-masing $row, meskipun saya hanya meminta untuk mengembalikan id:

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

Jadi entah bagaimana saya mendapatkan nilai kedua, sekali lagi dengan idtetapi dengan pengenal kunci yang berbeda (dalam hal ini indeks). Apa yang saya lakukan salah di sini?

Jawaban

1 deoomen Aug 18 2020 at 05:51

Ini mengembalikan nilai yang sama dua kali karena jenis pengambilan PDO. Default PDO::FETCH_BOTHartinya "mengembalikan kolom seperti yang diindeks dari 0 dan dengan nama". Jika Anda hanya ingin mengembalikan indeks bernama, tambahkan parameter keempat ke konstruktor PDO dengan berbagai opsi (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]
);