मुझे अपने PHP में दो बार एक ही कॉलम क्यों मिल रहा है? PostgreSQL क्वेरी? [डुप्लिकेट]
मेरे पास एक Postgres डेटाबेस है जिसमें से मैं एक PHP स्क्रिप्ट के साथ डेटा पुनर्प्राप्त करता हूं। इस स्क्रिप्ट के अंदर मैं पीडीओ के माध्यम से जोड़ता हूं:
$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) {["आईडी"] => स्ट्रिंग (3) "जीएनक्यू" [0] => स्ट्रिंग (3) "जीएनक्यू"}
इसलिए किसी तरह मुझे दूसरा मान मिल रहा है, id
लेकिन फिर से एक अलग कुंजी पहचानकर्ता के साथ (उस स्थिति में सूचकांक)। मुझसे यहां क्या गलत हो रहा है?
जवाब
यह पीडीओ लाने के प्रकार के कारण दो बार समान मूल्य लौटाता है। डिफ़ॉल्ट PDO::FETCH_BOTH
जिसका अर्थ है "0 से अनुक्रमित और नाम के साथ कॉलम लौटाएं"। यदि आप केवल नामित अनुक्रमित नाम वापस करना चाहते हैं, तो विकल्पों की सरणी के साथ पीडीओ कंस्ट्रक्टर में चौथा परम जोड़ें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]
);