Sample to get the primary keys of an MSSQL table:
$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 — Liste les colonnes utilisées dans une clé primaire
Liste les colonnes utilisées dans une clé primaire de la table
table
.
odbc
L'identifiant de connexion ODBC, voir la documentation de la fonction odbc_connect() pour plus de détails.
catalog
Le catalogue ('calificatif' dans le jargon ODBC 2).
schema
Le schéma ('propriétaire' dans le jargon ODBC 2).
table
Retourne un identifiant de résultat ODBC ou false
si une erreur survient.
Le jeu de résultat contient les colonnes suivantes :
TABLE_CAT
TABLE_SCHEM
TABLE_NAME
COLUMN_NAME
KEY_SEQ
PK_NAME
Le jeu de résultat est ordonné par TABLE_CAT
, TABLE_SCHEM
,
TABLE_NAME
et KEY_SEQ
.
Exemple #1 Lister les Clés primaire d'une Colonne
<?php
$conn = odbc_connect($dsn, $user, $pass);
$primarykeys = odbc_primarykeys($conn, 'TutorialDB', 'dbo', 'TEST');
while (($row = odbc_fetch_array($primarykeys))) {
print_r($row);
break; // further rows omitted for brevity
}
?>
Résultat de l'exemple ci-dessus est similaire à :
Array ( [TABLE_CAT] => TutorialDB [TABLE_SCHEM] => dbo [TABLE_NAME] => TEST [COLUMN_NAME] => id [KEY_SEQ] => 1 [PK_NAME] => PK__TEST__3213E83FE141F843 )
Sample to get the primary keys of an MSSQL table:
$cn = odbc_connect( "DSN", "sa", "pwd");
$rs = odbc_primarykeys( $cn, "database", "dbo", "table_name");
odbc_result_all($rs);
Responding to devendra_joshi:
In DB2 Universal Database for Linux, UNIX, and Windows the catalog views are accessed through the SYSCAT schema, not the SYSIBM schema -- so you should be issuing "SELECT * FROM SYSCAT.KEYCOLUSE" to list all of the columns that participate in a given key constraint.
A complete list of the catalog views for DB2 can be referenced at http://publib.boulder.ibm.com/infocenter/db2help/ by searching for 'catalog views' and selecting the top hit.
I want a list of primary keys of a table in db2
by using
'select * from SYSIBM.SYSKEYCOLUSE ' query i am getting the result on CLP
but when i am writing it in PHP as follows it returns 0 ROWS.
$mstmt="select * from SYSIBM.SYSKEYCOLUSE";
$b=odbc_exec($conn,$mstmt);
echo odbc_result_all($b);
where as if we write this code
$mstmt="select * from SYSIBM.SYSFUNCTIONS";
$b=odbc_exec($conn,$mstmt);
echo odbc_result_all($b);
it returns the correct data.
I was trying to find the primary keys from an SQLServer database through the ODBC interface. Funnily enough, the odbc_primarykeys function doesn't work with SQLServer (at least not my implementation of it). Fortunately, the sp_keys query is passed through and the answer returned. This code works (providing you know which database you're dealing with, which is a whole 'nother story).
// If this is SQLServer, we need to do a special operation to get the
// primary keys.
//
// Looks like the implementers of the ODBC interface just blew this
// one off, since the database has a query to return the info and the
// info even comes back with the same column names.
if ($DBType == "SQLServer")
$KeySel = odbc_exec($DBConn, "sp_pkeys ".$TableName);
// Otherwise, ask the database through ODBC for the primary key
// names.
else $KeySel = odbc_primarykeys($DBConn, $DatabaseName,
$DatabaseUser, $TableName);
while ($KeySel && ($KeyRec = odbc_fetch_array($KeySel)))
$KeyCol[$KeyRec["KEY_SEQ"]] = $KeyRec["COLUMN_NAME"];