मुझे अपने PHP में दो बार एक ही कॉलम क्यों मिल रहा है? PostgreSQL क्वेरी? [डुप्लिकेट]

Aug 18 2020

मेरे पास एक 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लेकिन फिर से एक अलग कुंजी पहचानकर्ता के साथ (उस स्थिति में सूचकांक)। मुझसे यहां क्या गलत हो रहा है?

जवाब

1 deoomen Aug 18 2020 at 05:51

यह पीडीओ लाने के प्रकार के कारण दो बार समान मूल्य लौटाता है। डिफ़ॉल्ट 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]
);