[英]php getting column names for older version of ms-access (.mdb)
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);
嘗試這樣的事情:
<?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'];
// ...
}
?>
希望有幫助!
和平!
您無需使用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()
時都指定它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.