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 術語中稱為 'owner')。

表格

回傳值

成功時傳回 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

在適用於 Linux、UNIX 和 Windows 的 DB2 Universal Database 中,目錄視圖是透過 SYSCAT 綱要存取,而不是 SYSIBM 綱要,因此您應該發出「SELECT * FROM SYSCAT.KEYCOLUSE」來列出參與指定鍵約束的所有欄位。

您可以在 http://publib.boulder.ibm.com/infocenter/db2help/ 搜尋「目錄視圖」並選取最上面的結果,以參考 DB2 目錄視圖的完整列表。
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