取得 MSSQL 表格主鍵的範例
$cn = odbc_connect( "DSN", "sa", "pwd");
$rs = odbc_primarykeys( $cn, "database", "dbo", "table_name");
odbc_result_all($rs);
(PHP 4, PHP 5, PHP 7, PHP 8)
odbc_primarykeys — 取得資料表的主鍵
$odbc
,$catalog
,$schema
,$table
傳回一個結果物件,可用於擷取組成資料表主鍵的欄位名稱。
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_CAT
、TABLE_SCHEM
、TABLE_NAME
和 KEY_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 )
取得 MSSQL 表格主鍵的範例
$cn = odbc_connect( "DSN", "sa", "pwd");
$rs = odbc_primarykeys( $cn, "database", "dbo", "table_name");
odbc_result_all($rs);
回覆 devendra_joshi
在適用於 Linux、UNIX 和 Windows 的 DB2 Universal Database 中,目錄視圖是透過 SYSCAT 綱要存取,而不是 SYSIBM 綱要,因此您應該發出「SELECT * FROM SYSCAT.KEYCOLUSE」來列出參與指定鍵約束的所有欄位。
您可以在 http://publib.boulder.ibm.com/infocenter/db2help/ 搜尋「目錄視圖」並選取最上面的結果,以參考 DB2 目錄視圖的完整列表。
我想要取得 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);
它會回傳正確的資料。
我試圖透過 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"];