PDOStatement :: getColumnMeta не поддерживает драйвер Microsoft Access (* .mdb). Как я могу получить имена полей динамически с помощью PDO?
Примечание: Я не стал бы заранее знаю sql-запрос. $ sql ниже предназначен только для демонстрации.
$dbh = new PDO("odbc:Driver = {Microsoft Access Driver
(*.mdb)};Dbq=C:\database.mdb;Uid=Admin");
// Sample SQL could be used
$sql = "SELECT name, SUM(b) AS sumvalue FROM table GROUP BY name";
$result = $dbh->query($sql);
$data = [];
while ($row = $result->fetch()) {
for ($i = 0; $i < $result->columnCount(); $i++) {
$col = $result->getColumnMeta($i); //<------ This line not supported
$fieldName = $col['name'];
if (!isset($data[$fieldName])) $data[$fieldName] = [];
array_push($data[$fieldName], $row[$fieldName]);
}
}
// Get JSON result
echo json_encode($data);
@Mike Получить результат в формате JSON из запроса SQL. Пока заранее знать SQL-запрос не буду.
Почему ты не можешь просто сделать $result->fetchAll(PDO::FETCH_ASSOC);? Это помещает имена столбцов в ассоциативный массив, что, похоже, вы пытаетесь сделать здесь.
@Mike пробует $ result-> fetchAll (PDO :: FETCH_ASSOC)
Выложил как ответ. Дай мне знать, если это работает.






Попробуйте что-нибудь подобное:
<?php
$fName = '';
$sumVal = '';
$pdoStr = 'odbc:Driver = {Microsoft Access Driver (*.mdb)};Dbq=C:\database.mdb;Uid=Admin"';
$dbh = new PDO($pdoStr);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = "SELECT name, SUM(b) AS sumvalue FROM table GROUP BY name";
$result = $dbh->query($sql);
$data = $result->fetchAll();
// here, you only have two fields, "name" and "sumvalue", so, you need to use these fields only, so this will work
foreach($data as $row) {
$fName = row['Name'];
$sumVal = row['sumvalue'];
// ...
}
?>
Надеюсь, что поможет!
Мир!
Мне нужно получать названия полей на ходу. Я не знаю заранее названия полей.
это самый простой способ получить значения из столбцов в операторе PDO, поскольку строка PDO имеет значение, после соединения со строкой команды одинаковы для всех
поэтому вам нужно выполнить цикл из вашей таблицы и получить каждый столбец по его имени, обратите внимание, что имя - это имя столбца в таблице, поскольку они названы окончательно или названы программно, например "sumvalue"
Может быть как финансово, так и программно. Я не буду знать заранее sql-запрос.
физически это "b", программно "sumvalue", вы не можете получить несуществующий столбец
В этом примере мне нужно получить в качестве результата 'name' и 'sumvalue'.
и в моем примере он будет возвращен как значение, попробуйте его увидеть
Позвольте нам продолжить обсуждение в чате.
Вам не нужно использовать getColumnMeta() для получения имени столбца. Если вы используете PDO::FETCH_ASSOC, имена столбцов будут ключами ассоциативного массива. Вы можете просто перебрать это:
$results = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
$data = [];
foreach ($results as $row) {
foreach ($row as $key => $value) {
$data[$key][] = $value;
}
}
// Get JSON result
echo json_encode($data);
Примечание. Вы также можете сделать это режимом выборки по умолчанию для этого соединения:
$dbh = new PDO("odbc:Driver = {Microsoft Access Driver
(*.mdb)};Dbq=C:\database.mdb;Uid=Admin");
$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
Таким образом, вам не нужно указывать его каждый раз, когда вы используете fetch() / fetchAll().
Спасибо, это все, что мне нужно.
Чего вы на самом деле пытаетесь достичь с помощью этого кода?