2024 年 PHP Conference Japan

odbc_columns

(PHP 4, PHP 5, PHP 7, PHP 8)

odbc_columns列出指定表格中的欄位名稱

說明

odbc_columns(
    Odbc\Connection $odbc,
    ?string $catalog = null,
    ?string $schema = null,
    (?string) $table = null,
    (?string) $column = null
): Odbc\Result|false

列出指定範圍內的所有欄位。

參數

odbc

ODBC 連線物件,詳情請參閱 odbc_connect()

catalog

目錄 (在 ODBC 2 術語中稱為「限定詞」)。

schema

綱要 (在 ODBC 2 術語中稱為「擁有者」)。此參數接受以下搜尋模式:% 匹配零個或多個字元,_ 匹配單個字元。

table

表格名稱。此參數接受以下搜尋模式:% 匹配零個或多個字元,_ 匹配單個字元。

column

欄位名稱。此參數接受以下搜尋模式:% 匹配零個或多個字元,_ 匹配單個字元。

返回值

成功時返回 ODBC 結果物件,失敗時返回 false

結果集包含以下欄位

  • TABLE_CAT
  • TABLE_SCHEM
  • TABLE_NAME
  • COLUMN_NAME
  • DATA_TYPE
  • TYPE_NAME
  • COLUMN_SIZE
  • BUFFER_LENGTH
  • DECIMAL_DIGITS
  • NUM_PREC_RADIX
  • NULLABLE
  • REMARKS
  • COLUMN_DEF
  • SQL_DATA_TYPE
  • SQL_DATETIME_SUB
  • CHAR_OCTET_LENGTH
  • ORDINAL_POSITION
  • IS_NULLABLE
驅動程式可能會回報額外的欄位。

結果集按 TABLE_CATTABLE_SCHEMTABLE_NAMEORDINAL_POSITION 排序。

更新日誌

版本 說明
8.4.0 odbc 現在需要 Odbc\Connection 實例;以前需要的是 resource
8.0.0 schematablecolumn 現在可以為 null。

範例

範例 #1 列出表格的欄位

<?php
$conn
= odbc_connect($dsn, $user, $pass);
$columns = odbc_columns($conn, 'TutorialDB', 'dbo', 'test', '%');
while ((
$row = odbc_fetch_array($columns))) {
print_r($row);
break;
// 為簡潔起見,省略後續列
}
?>

以上範例的輸出結果類似如下

Array
(
    [TABLE_CAT] => TutorialDB
    [TABLE_SCHEM] => dbo
    [TABLE_NAME] => TEST
    [COLUMN_NAME] => id
    [DATA_TYPE] => 4
    [TYPE_NAME] => int
    [COLUMN_SIZE] => 10
    [BUFFER_LENGTH] => 4
    [DECIMAL_DIGITS] => 0
    [NUM_PREC_RADIX] => 10
    [NULLABLE] => 0
    [REMARKS] =>
    [COLUMN_DEF] =>
    [SQL_DATA_TYPE] => 4
    [SQL_DATETIME_SUB] =>
    [CHAR_OCTET_LENGTH] =>
    [ORDINAL_POSITION] => 1
    [IS_NULLABLE] => NO
)

參見

新增註記

使用者貢獻的註記 13 則註記

Thomas
15 年前
[MS SQL Server 2005/2008, PHP 5]

假設您需要存取特定資料表的欄位名稱,例如將它們顯示為缺少資訊的欄位的表格標題。在瀏覽文件時,我有點搞不清楚如何在不使用 odbc_result_all() 的情況下使用 odbc_columns(),odbc_result_all() 會將所有內容輸出到單個 HTML 表格中。

以下是一種將所有輸出放入陣列,然後只存取 odbc_columns() 輸出的一個或多個欄位的方法

<?php
include('connect.inc'); // <== 將所有資料庫連線參數放在這裡。(DSN、PWD、USR、mssql_connect 等;返回 $connection)

$outval = odbc_columns($connection, "您的資料庫名稱", "%", "您的資料表名稱", "%");

$pages = array();
while (
odbc_fetch_into($outval, $pages)) {
echo
$pages[3] . "<br />\n"; // 將陣列 $pages 的所有欄位顯示在新的一行,直到陣列指標到達陣列資料的結尾
}
?>

現在您的陣列 $pages 將具有以下內容
([x] 是為了便於理解而顯示的陣列索引)

[0] TABLE_CAT <== 您的資料庫名稱
[1] TABLE_SCHEM <== dbo,您的資料表結構描述
[2] TABLE_NAME <== 您的資料表名稱
[3] COLUMN_NAME <== 您的欄位名稱(在 odbc_columns() 中使用 "%" 全選)
[4] DATA_TYPE <== -8
[5] TYPE_NAME <== nchar(對應於 -8,例如 11 是 datetime,依此類推)
[6] COLUMN_SIZE <== 數值
[7] BUFFER_LENGTH <== 數值
[8] DECIMAL_DIGITS <== 數值或 NULL
[9] NUM_PREC_RADIX <== 數值或 NULL
[10] NULLABLE <== 數值
[11] REMARKS <== 數值或 NULL
[12] COLUMN_DEF <== 數值或 NULL
[13] SQL_DATA_TYPE <== 數值
[14] SQL_DATETIME_SUB <== 數值或 NULL
[15] CHAR_OCTET_LENGTH <== 數值或 NULL
[16] ORDINAL_POSITION <== 數值
[17] IS_NULLABLE <== YES/NO
[18] SS_DATA_TYPE <== 數值

現在您可以透過其鍵值遞迴地存取每個欄位,並且只輸出所需的欄位,而不是使用 odbc_result_all() 輸出所有內容。
請注意,陣列鍵值從零 (0) 開始,而不是一 (1),因此 echo $pages[3] 會從上面的列表中選取 COLUMN_NAME。

希望這有幫助...

致敬
Thomas
ke3wh at comcast dot net
20 年前
以下是從 DSN MS Access 資料庫表格中擷取資料並顯示的完整腳本。

function Error_Handler( $msg, $cnx ) {
echo "$msg \n";
odbc_close( $cnx);
exit();
}

$cnx = odbc_connect( 'DSN_NAME' , '', '' );//連接到 MSAccess
if (!$cnx) {
Error_handler( "odbc_connect 發生錯誤" , $cnx );
}

$res400= odbc_columns($cnx,"DSN_NAME","","TABLE");
echo odbc_result_all($res400);
php dot lpatrick at spamgourmet dot com
16 年前
因為我當時只是想查看一個我不知其表格結構的 MS Access 檔案的表格描述,所以我寫了這段程式碼(其中 $inputfile 是 Access 檔案名稱)

<?php
$conn
= odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".$inputfile;, "", "");

$tabs = odbc_tables($conn);
$tables = array();
while (
odbc_fetch_row($tabs)){
if (
odbc_result($tabs,"TABLE_TYPE")=="TABLE") {
$table_name = odbc_result($tabs,"TABLE_NAME");
$tables["{$table_name}"] = array();
$cols = odbc_exec($conn,'select * from `'.$table_name.'` where 1=2'); // 我們不需要內容
$ncols = odbc_num_fields($cols);
for (
$n=1; $n<=$ncols; $n++) {
$field_name = odbc_field_name($cols, $n);
$tables["{$table_name}"]["{$field_name}"]['len'] = odbc_field_len($cols, $n);
$tables["{$table_name}"]["{$field_name}"]['type'] = odbc_field_type($cols, $n);
}
}
}
odbc_close ($conn);
print_r($tables);
?>
eion at robbmob dot com
12 年前
odbc_columns() 函式返回結果的陣列鍵值有時可能是小寫,而不是大寫(例如 'column_name' 而不是 'COLUMN_NAME')。這取決於您連接的 ODBC 驅動程式而定。
jeremie dot legrand at komori-chambon dot fr
16 年前
以下是如何搭配「Attunity Connect」(一個連接到 VMS 的 ODBC 連接器)使用 odbc_columns() 的方法

$db = "my_database";
$table = "my_table";
$con = odbc_connect($db, "user", "password");
$result = odbc_columns($con, $db, "", $table, "%");
while (odbc_fetch_row($result)) {
echo odbc_result_all($result);
}
LyleE at LocalMotion dot com
23 年前
我花了一段時間才搞懂這個指令,想幫其他人省點時間。我們不太清楚 qualifier 的作用。對於 MSSQL 7.0 來說,它是你連接的資料庫。對於 pubs 資料庫,它看起來像這樣。

$rs = odbc_columns($DBConnection, "Pubs", "%", "jobs");

這會顯示 jobs 資料表。
tom at jargonsoft dot com
5 年前
這個頁面的文件是 php 中最糟糕的。我知道開放原始碼的文件通常都很糟糕,但这實在是讓人無法接受。
限定詞:限定詞。真的嗎?
不如寫成:複雜欄位及多重規則:複雜欄位及多重規則。
饒了我吧。
不如實際定義其含義以及如何使用它?
並附上幾個範例!!
像這樣的垃圾文件,會讓軟體開發人員名譽掃地。
Artur
17 年前
這是我使用 odbc_columns 實際取得欄位名稱的唯一方法。希望對某些人有用。

$result = odbc_columns($odbc,$dbhost,"dbo", "KIR_ViolationDetail");

while (odbc_fetch_row($result))
{
echo odbc_result($result,"COLUMN_NAME");
}
laundro at gmail dot com
20 年前
使用 ODBC 取得 Excel 中的所有欄位名稱
$cols = odbc_columns($connection, $filename, NULL, $sheet);

其中
$connection 是 odbc_connect 的結果;
$filename 是 Excel 檔案的檔名;
$sheet 是 Excel 工作表的名稱。

當您想要查詢 Excel 檔案而無需事先命名範圍時,這會很有用。使用從上述指令取得的結果,您可以填入陣列並使用其內容(即欄位名稱)進行進一步查詢。
netaminas at hotamil dot com
20 年前
使用 IBM Client Access 32 位元 ODBC 驅動程式連線

為了透過 ODBC 驅動程式存取 DB2 iSeries (AS/400) 中的表格資訊,我嘗試了以下程式碼,而且成功了!!

$conn_ODBC = odbc_connect("DSN", "USER", "PASSW") or die;
$tabela = "IBM iSeries 中的表格名稱";
$libname = "IBM iSeries 中的資料庫名稱"

$res400 = odbc_columns($conn_ODBC, "DSN", $libname, $tabela, "%") or die("<p><font color=#FF0000>讀取 AS/400 表格 ".$tabela." 發生錯誤: ".odbc_errormsg());

echo odbc_result_all($res400);

Netaminas.com
葡萄牙
匿名
21 年前
ODBC 與 MS Access

odbc_columns($conn,"DSN_NAME","","TABLE_NAME");
Sergio Sartori
21 年前
使用這個函式連接到 MS SQL Server 2000 資料庫,語法如下:

$res = odbc_columns($connId, $dbName, "%", $tableName, "%");

我實際上取得的結果集包含以下欄位名稱

TABLE_CAT、TABLE_SCHEM、TABLE_NAME、COLUMN_NAME、DATA_TYPE、TYPE_NAME、COLUMN_SIZE、BUFFER_LENGTH、DECIMAL_DIGITS、NUM_PREC_RADIX、NULLABLE、REMARKS

以上為顯示順序。
josh at engledental dot com
22 年前
(PHP4.2.1, Win2k, MSSQL 2K)

此函式返回的結果 ID 的行為似乎與查詢返回的結果 ID 不完全相同。

當我嘗試在結果 ID 上使用後續的 ODBC 函式時,會出現各種錯誤,例如:

odbc_fetch_into - 此函式似乎只有在未指定列號或列號為 0 時才能正常運作。

odbc_fetch_row - 此函式不會從結果集中返回任何列。在某些情況下,我可以在 while 迴圈中使用它,但它似乎有錯誤。因此,我的 odbc_num_of_rows 函式(用來取代無法運作的 odbc_num_rows 函式的權宜之計)也無法正常運作。

我建議立即將結果轉儲到陣列中,並釋放此函式建立的結果 ID。

附註:如果 anyone 有任何進一步的見解或解決方法,我將不勝感激。
To Top