2

PHP ADOdbを使用しており、結果セットを取得できます。

$result = &$db->Execute($query);

その1つの行からフィールド名を取得してループするにはどうすればよいですか?

(それが重要な場合は、アクセスデータベースを使用しています。)

4

6 に答える 6

6

フェッチ モードに依存します。FetchMode を ADODB_FETCH_NUM (おそらくデフォルト) に設定すると、各行には列のフラットな配列が含まれます。FetchMode を ADODB_FETCH_ASSOC に設定すると、キーで各値にアクセスできる連想配列が得られます。以下は ADODB のドキュメントからの引用です - http://phplens.com/lens/adodb/docs-adodb.htm#ex1

$db->SetFetchMode(ADODB_FETCH_NUM);
$rs1 = $db->Execute('select * from table');
$db->SetFetchMode(ADODB_FETCH_ASSOC);
$rs2 = $db->Execute('select * from table');

print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1')
print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1')

結果のセットをループするには:

$result = &$db->Execute($query);
foreach ($result as $row) {
    print_r($row);
}
于 2010-02-11T14:55:28.797 に答える
3

@thetaiko によって投稿されたソリューションの小さな改善。

フィールド名のみが必要な場合はLIMIT 1、select ステートメントの末尾に追加します (以下に示すように)。これにより、テーブル全体を送信するのではなく、列名を含む単一の行を送信するようにサーバーに指示します。

SELECT * FROM table LIMIT 1;

私は 910 万件のレコードを含むテーブルを扱っているので、この小さな変更によってクエリが大幅に高速化されます。

于 2011-12-10T20:34:45.000 に答える
2

これは、フィールド配列を返すために使用する関数です。たとえば、MySQL 以外の DB で動作できるようにするために、いくつかの余分なものを取り除きました。

function getFieldNames($strTable, $cn) {

    $aRet = array();

    # Get Field Names:
    $lngCountFields = 0;

    $strSQL = "SELECT * FROM $strTable LIMIT 1;";

    $rs = $cn->Execute($strSQL)
            or die("Error in query: \n$strSQL\n"  . $cn->ErrorMsg());
    if (!$rs->EOF) {
        for ($i = 0; $i < $rs->FieldCount(); $i++) {
            $fld = $rs->FetchField($i);
            $aRet[$lngCountFields] = $fld->name;
            $lngCountFields++;
        }
    }

    $rs->Close();
    $rs = null;

    return $aRet;

}

編集:私が言うように、私はいくつかの余分なものを取り除きました。したがって、上記の縮小版ではEOFチェックは不要になりました。

于 2012-01-18T13:05:20.410 に答える
1

空のテーブルまたは複数のテーブルに関する結合でも列名が必要な場合は、これを使用します。

$db->Execute("SELECT .......");
// FieldTypesArray - Reads ColoumnInfo from Result, even for Joins
$colInfo = $res->FieldTypesArray(); 

$colNames = array();
foreach($colInfo as $info) $colNames[] = $info->name;
于 2016-08-04T09:16:48.210 に答える
1

私は最初に MetaColumnNames を使用しようとしましが、同じサーバーから実行しているときに VisualPHPUnit と実際のサイトで異なる結果が得られたため、最終的に次のようなことを行いました。

$sql = "select column_name, column_key,  column_default, data_type, table_name, table_schema from information_schema.columns";
$sql .= ' where table_name="'.$table.'" and table_schema="'.$database_name.'"';
$result = $conn->Execute($sql);
while($row = $result->fetchRow()) {
    $out[] = strToUpper($row['column_name']);
}   

mysql、mssql、および postgres で動作するはずです。このようにする利点は、テーブルからのクエリが空のセットを返す場合でも、列名を取得できることです。

于 2012-05-07T11:03:51.767 に答える