PHP: Tablonun birincil anahtarı al?

9 Cevap php

Mysql-veritabanı birincil anahtar alan adını almak için bir yolu var mı? Örneğin:

Böyle bir tablo var:

+----+------+
| id | name |
+----+------+
| 1  | Foo1 |
| 2  | Foo2 |
| 3  | Foo3 |
+----+------+

Alan kimliği birincil anahtar (bu otomatik artış var ama ben bunu kullanamazsın) nerede. Nasıl php alanlar adı "id" alabilirsiniz?

9 Cevap

Daha iyi bir yolu her zaman INFORMATION_SCHEMA erişiminiz yoksa beri SHOW KEYS kullanmaktır. Aşağıdaki işler:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'

Sütun_ismi birincil anahtarın adını içerir.

İşte Birincil anahtar sütun Name is

SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
  AND t.table_schema='YourDatabase'
  AND t.table_name='YourTable';

Yukarıdaki önerilerin sınırlamalar vardır, bu gerçekten geri birincil anahtarları kullanarak olacak nasıl bağlıdır. http://mysql-0v34c10ck.blogspot.com/2011/05/better-way-to-get-primary-key-columns.html: Bu blog yazısı Birincil Anahtar sütun almak için çeşitli yöntemler açıklanır

PHP bir yaklaşım için, kullanabilirsiniz mysql_field_flags

$q = mysql_query('select * from table limit 1');

for($i = 0; $i < mysql_num_fields(); $i++)
    if(strpos(mysql_field_tags($q, $i), 'primary_key') !== false)
        echo mysql_field_name($q, $i)." is a primary key\n";

Sonunda, o var!

<?php

function mysql_get_prim_key($table){
$sql = "SHOW INDEX FROM $table WHERE Key_name = 'PRIMARY'";
$gp = mysql_query($sql);
$cgp = mysql_num_rows($gp);
if($cgp > 0){
// Note I'm not using a while loop because I never use more than one prim key column
$agp = mysql_fetch_array($gp);
extract($agp);
return($Column_name);
}else{
return(false);
}
}

?>

Buna ne dersin.

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = db
   AND TABLE_NAME = table
   AND COLUMN_KEY = 'PRI';


SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = db
   AND TABLE_NAME = table
   AND COLUMN_KEY = 'UNI';

kullanın:

show columns from tablename where `Key` = "PRI"';

Ben BİLİYOR Bunun için bir astar olmak zorunda, ben hiçbir başarı ile birkaç şey denedim.

Hat üzerinde daha kullanarak ve biraz daha fazla işlemci yoğun, bu işlev I, diğer taraftan, yapılan, herhangi bir baş ağrısı olmadan işe yaramaktadır:

<?php

//Pass a table name
function mysql_get_prim_key($table){
$sql = "SHOW COLUMNS FROM $table";
$ts = mysql_query($sql);
$cts = mysql_num_rows($ts);
while($ats = mysql_fetch_array($ts)){
if($ats['Key'] == "Pri"){return($ats['Field']);}
}
return(false);
}

// Returns the column name of primary key, or false if no primary key

?>

Ben ile karıştırmasını

<?php
echo "<pre>";
$sql = "SHOW COLUMNS FROM $table";
$cts = mysql_num_rows($ts);
while($ats = mysql_fetch_array($ts)){
print_r($ats);
}

?>

ve ben birincil anahtar sütun üzerinde çıktı [Key] => PRI görüyorum, ama bana hayatı için olduğu gibi tek bir SQL deyimi içine koymak nasıl anlamaya olamaz:

<?php
$sql = "SHOW COLUMNS FROM $table WHERE Key='PRI'";
?>

Ben sadece çalışmak için alınamıyor.

Bu tetikleyici birisi bir şey düşünmek olabilir? Bunun için bir liner bulmak istiyorum.

Teşekkürler!

Mümkün olan en kısa kod gibi bir şey gibi görünüyor

// $dblink contain database login details 
// $tblName the current table name 
$r = mysqli_fetch_assoc(mysqli_query($dblink, "SHOW KEYS FROM $tblName WHERE Key_name = 'PRIMARY'")); 
$iColName = $r['Column_name'];