簡體   English   中英

php獲取舊版本的ms-access(.mdb)的列名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM