PHP Conference Japan 2024

odbc_primarykeys

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

odbc_primarykeys获取表的主键

描述

odbc_primarykeys(
    Odbc\Connection $odbc,
    ?string $catalog,
    string $schema,
    string $table
): Odbc\Result|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 排序。

变更日志

版本 描述
8.4.0 odbc 现在需要一个 Odbc\Connection 实例;以前需要一个 resource
8.4.0 此函数现在返回一个 Odbc\Result 实例;以前返回一个 resource

范例

示例 #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

在 DB2 Universal Database for Linux, UNIX, and Windows 中,目录视图是通过 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