odbc_primarykeys

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

odbc_primarykeys获取表的 主键

描述

odbc_primarykeys(
    resource $odbc,
    ?string $catalog,
    string $schema,
    string $table
): resource|false

返回一个结果标识符,可用于获取构成表主键的列名。

参数

odbc

ODBC 连接标识符,有关详细信息,请参阅 odbc_connect()

catalog

目录(在 ODBC 2 中称为“限定符”)。

schema

模式(在 ODBC 2 中称为“所有者”)。

table

返回值

返回一个 ODBC 结果标识符,如果失败则返回 false

结果集包含以下列

  • TABLE_CAT
  • TABLE_SCHEM
  • TABLE_NAME
  • COLUMN_NAME
  • KEY_SEQ
  • PK_NAME
驱动程序可以报告其他列。

结果集按 TABLE_CATTABLE_SCHEMTABLE_NAMEKEY_SEQ 顺序排序。

范例

范例 #1 列出列的主键

<?php
$conn
= odbc_connect($dsn, $user, $pass);
$primarykeys = odbc_primarykeys($conn, 'TutorialDB', 'dbo', 'TEST');
while ((
$row = odbc_fetch_array($primarykeys))) {
print_r($row);
break;
// 省略了后面的行以简洁
}
?>

上面的示例将输出类似于以下内容

Array
(
    [TABLE_CAT] => TutorialDB
    [TABLE_SCHEM] => dbo
    [TABLE_NAME] => TEST
    [COLUMN_NAME] => id
    [KEY_SEQ] => 1
    [PK_NAME] => PK__TEST__3213E83FE141F843
)

参见

添加笔记

用户贡献笔记 4 笔记

Rio Bautista (RRIT)
20 年前
获取 MSSQL 表主键的示例

$cn = odbc_connect( "DSN", "sa", "pwd");

$rs = odbc_primarykeys( $cn, "database", "dbo", "table_name");

odbc_result_all($rs);
dan dot scott at ca dot ibm dot com
19 年前
回复 devendra_joshi

在适用于 Linux、UNIX 和 Windows 的 DB2 通用数据库中,目录视图通过 SYSCAT 模式访问,而不是 SYSIBM 模式 - 因此您应该发出“SELECT * FROM SYSCAT.KEYCOLUSE” 来列出所有参与给定键约束的列。

有关 DB2 目录视图的完整列表,请访问 http://publib.boulder.ibm.com/infocenter/db2help/,搜索“目录视图”并选择最上面的结果。
devendra_joshi at hotmail dot com
21 年前
我想要一个 db2 中表的主键列表

通过使用
'select * from SYSIBM.SYSKEYCOLUSE ' 查询,我在 CLP 上得到了结果
但是当我以 PHP 形式编写以下代码时,它返回 0 行。

$mstmt="select * from SYSIBM.SYSKEYCOLUSE";
$b=odbc_exec($conn,$mstmt);
echo odbc_result_all($b);

而如果我们编写这段代码

$mstmt="select * from SYSIBM.SYSFUNCTIONS";
$b=odbc_exec($conn,$mstmt);
echo odbc_result_all($b);

它返回正确的数据。
ewilde aht bsmdevelopment dawt com
18 年前
我试图通过 ODBC 接口从 SQLServer 数据库中查找主键。有趣的是,odbc_primarykeys 函数不适用于 SQLServer(至少我的实现不是这样)。幸运的是,sp_keys 查询通过并返回了答案。此代码有效(前提是您知道要处理哪个数据库,这完全是另一回事)。

// 如果是 SQLServer,我们需要执行特殊操作来获取
// 主键。
//
// 看起来 ODBC 接口的实现者只是把这个
// 遗漏了,因为数据库有一个查询可以返回信息,并且
// 信息甚至以相同的列名返回。
if ($DBType == "SQLServer")
$KeySel = odbc_exec($DBConn, "sp_pkeys ".$TableName);

// 否则,通过 ODBC 向数据库询问主键
// 名称。
else $KeySel = odbc_primarykeys($DBConn, $DatabaseName,
$DatabaseUser, $TableName);

while ($KeySel && ($KeyRec = odbc_fetch_array($KeySel)))
$KeyCol[$KeyRec["KEY_SEQ"]] = $KeyRec["COLUMN_NAME"];
To Top