เหตุใดฉันจึงได้รับคอลัมน์เดียวกันสองครั้งใน PHP | แบบสอบถาม PostgreSQL? [ทำซ้ำ]

Aug 18 2020

ฉันมีฐานข้อมูล Postgres ซึ่งฉันดึงข้อมูลด้วยสคริปต์ PHP ภายในสคริปต์นี้ฉันเชื่อมต่อผ่าน PDO:

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

จากนั้น ฉันมีคำถามที่ควรแสดงรายการidของแต่ละอินสแตนซ์:

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

จากนั้นฉันได้รับผลลัพธ์จากแบบสอบถามของฉัน:

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

และสุดท้าย ฉันพิมพ์ผลลัพธ์ของฉัน:

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

ตอนนี้ปัญหาของฉันคือ ฉันได้รับอาร์เรย์ของค่าสองค่าในเบราว์เซอร์สำหรับแต่ละค่า$rowแม้ว่าฉันจะขอให้ส่งคืนเท่านั้นid:

อาร์เรย์(2) { ["id"]=> สตริง(3) "GNQ" [0]=> สตริง(3) "GNQ" }

ดังนั้นฉันจึงได้รับค่าที่สองอีกครั้งด้วย the idแต่มีตัวระบุคีย์อื่น (ในกรณีนี้คือดัชนี) ฉันทำอะไรผิดที่นี่?

คำตอบ

1 deoomen Aug 18 2020 at 05:51

ส่งคืนค่าเดียวกันสองครั้งเนื่องจากประเภทการดึงข้อมูล PDO ค่าเริ่มต้นคือPDO::FETCH_BOTH"ส่งคืนคอลัมน์ตามดัชนีจาก 0 และมีชื่อ" หากคุณต้องการส่งคืนเฉพาะดัชนีที่มีชื่อ ให้เพิ่มพารามิเตอร์ตัวที่สี่ให้กับตัวสร้าง PDO พร้อมอาร์เรย์ของตัวเลือก (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]
);