Почему я дважды получаю один и тот же столбец в моем 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"}
Итак, каким-то образом я получаю второе значение, опять же с, 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]
);