เหตุใดฉันจึงได้รับคอลัมน์เดียวกันสองครั้งใน PHP | แบบสอบถาม PostgreSQL? [ทำซ้ำ]
ฉันมีฐานข้อมูล 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
แต่มีตัวระบุคีย์อื่น (ในกรณีนี้คือดัชนี) ฉันทำอะไรผิดที่นี่?
คำตอบ
ส่งคืนค่าเดียวกันสองครั้งเนื่องจากประเภทการดึงข้อมูล 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]
);