2024年PHP开发者大会日本站

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现在可以为空。

范例

示例 #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()(它将所有内容输出到单个HTML表格中)的情况下使用odbc_columns()。

这里介绍一种将所有输出存储到数组中,然后仅访问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( "Error in 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($resu)) {
echo odbc_result_all($resu);
}
LyleE at LocalMotion dot com
23年前
我花了一段时间才弄明白这个命令,我想为其他人节省一些时间。我们无法完全弄清楚限定符是什么。对于 MSSQL 7.0,它是您连接到的数据库。对于 pubs 数据库,它看起来像这样。

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

这将用于显示 jobs 表。
tom at jargonsoft dot com
5年前
这个页面上的文档是 PHP 文档中最糟糕的之一。我知道开源代码的文档传统上很糟糕,但这绝对不能接受。
限定符:限定符。真的吗??
怎么样:ComplexFieldWithManyRules:ComplexFieldWithManyRules。
饶了我吧。
如何实际定义其含义和使用方法?
以及一些示例!!
你们这种垃圾东西让软件开发者蒙羞。
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年前
从 Excel 使用 ODBC 获取所有列名
$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 函数的 hack)也不起作用。

我建议立即将结果转储到数组中并释放此函数创建的结果 ID。

附注 - 如果任何人有任何进一步的见解或解决方法,我将不胜感激。
To Top