odbc_columns

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

odbc_columns列出指定表中的列名

描述

odbc_columns(
    资源 $odbc,
    ?字符串 $catalog = null,
    ?字符串 $schema = null,
    ?字符串 $table = null,
    ?字符串 $column = null
): 资源|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.0.0 schematablecolumn 现在可以为空。

示例

示例 #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 条备注

11
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。

希望这有帮助...

干杯
托马斯
1
ke3wh at comcast dot net
19 年前
从 DSN MS Access DB 表中获取数据并显示它的完整脚本如下。

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

$cnx = odbc_connect( 'DSN_NAME' , '', '' );// 连接到 MSAccess
if (!$cnx) {
Error_handler( "Error in odbc_connect" , $cnx );
}

$res400= odbc_columns($cnx,"DSN_NAME","","TABLE");
echo odbc_result_all($res400);
1
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'); // we don't want content
$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);
?>
2
eion at robbmob dot com
12 年前
有时 odbc_columns() 结果的数组键可能是小写,而不是大写(例如 'column_name' 而不是 'COLUMN_NAME')。这可能取决于您连接到的 ODBC 驱动程序。
1
jeremie dot legrand at komori-chambon dot fr
16 年前
以下是使用 "Attunity Connect" 连接 VMS 的 ODBC 连接器的方式

$db = "my_database";
$table = "my_table";
$con = odbc_connect($db, "user", "password");
$result = odbc_columns($con, $db, "", $table, "%");
while (odbc_fetch_row($resu)) {
echo odbc_result_all($resu);
}
1
LyleE at LocalMotion dot com
23 年前
我花了很长时间才弄明白这个命令,我想我会节省其他人的时间。我们无法完全弄清楚限定符是什么。对于 MSSQL 7.0,它是您连接到的数据库。对于 pubs 数据库,它看起来像这样。

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

这将显示 jobs 表。
0
tom at jargonsoft dot com
4 年前
此页面上的文档是 PHP 中最糟糕的文档之一。我知道文档传统上对开源代码来说很糟糕,但这不能接受
限定符:限定符。真的吗??
如何:ComplexFieldWithManyRules:ComplexFieldWithManyRules。
让我休息一下。
如何真正定义它的含义以及如何使用它?
以及几个示例!!
你用这样的垃圾给软件开发者丢脸。
0
Artur
17 年前
这是我唯一能够使用 odbc_columns 获取字段名的实际方法。希望它对某人有用。

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

while (odbc_fetch_row($result))
{
echo odbc_result($result,"COLUMN_NAME");
}
0
laundro at gmail dot com
19 年前
从 Excel 通过 ODBC 获取所有列名
$cols = odbc_columns($connection, $filename, NULL, $sheet);

其中
$connection 是 odbc_connect 的结果;
$filename 是 Excel 文件的名称;
$sheet 是 Excel 工作表的名称。

当您想要查询 Excel 文件而无需事先命名范围时,这很有用。使用从上述命令中获得的结果,您可以填充数组并使用其内容(即列名)进行进一步查询。
0
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>Erro Na Leitura da Tabela ".$tabela." do AS/400: ".odbc_errormsg());

echo odbc_result_all($res400);

Netaminas.com
葡萄牙
0
匿名
20 年前
ODBC & MS ACCESS

odbc_columns($conn,"DSN_NAME","","TABLE_NAME");
0
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

按显示的顺序排列。
0
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。

ps - 如果有人有更多见解或解决方法,我将不胜感激。
To Top