---
title: "Hämta ut foreign key name ur MySql-databastabell"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/188045-hämta-ut-foreign-key-name-ur-mysql-databastabell"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "webbo"
published: "2011-10-05T20:57:05.000Z"
updated: "2011-10-07T07:57:15.000Z"
replies: 4
views: 778
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/188045-hämta-ut-foreign-key-name-ur-mysql-databastabell"
---

# Hämta ut foreign key name ur MySql-databastabell

## #1 — webbo, 2011-10-05T20:57Z

Jag vill, via ett PHP-script, veta vad en viss foreign key har för namn i min databastabell.

Hittade denna funktion för MySql-frågan i terminalen:

```
show create table
```

Som ger mig något i stil med:

```
host_contacts | CREATE TABLE `host_contacts` (
  `id` int(11) NOT NULL auto_increment,
  `host_id` int(11) NOT NULL,
  `contact_id` int(11) NOT NULL,
  `updated_by_id` int(11) default NULL,
  `updated_time` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `idx_host_contacts_unique` (`host_id`,`contact_id`),
  KEY `updated_by_id` (`updated_by_id`),
  KEY `contact_id` (`contact_id`),
  CONSTRAINT `host_contacts_ibfk_1` FOREIGN KEY (`updated_by_id`) REFERENCES `users` (`id`) ON DELETE SET NULL,
  CONSTRAINT `host_contacts_ibfk_2` FOREIGN KEY (`host_id`) REFERENCES `hosts` (`id`) ON DELETE CASCADE,
  CONSTRAINT `host_contacts_ibfk_3` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1 |
```

Så långt är jag med. Men hur ska mitt PHP script se ut för att få ut t.ex. namnet på foreign key för kolumnen "host_id"??

Jag vill kunna göra något i stil med:

```php

function getFKname('host_contacts',  'host_id', 'hosts',  'id')
{
  // ...
}

echo 'FK name is: ' . getFKname('host_contacts',  'host_id', 'hosts',  'id');
```

Som alltså i detta fall ska skriva ut:

> FK name is: host_contacts_ibfk_2

En tuff nöt att knäcka! Tack för hjälp!

Permalänk: https://www.webforum.nu/p/188045

## #2 — webbo, 2011-10-06T08:06Z

Hmm, borde kunna använda funktionen [preg_match_all](http://www.php.net/manual/en/function.preg-match-all.php), men hur ska mitt pattern se ut? Hmm... Någon?

Permalänk: https://www.webforum.nu/p/2283759

## #3 — webbo, 2011-10-06T11:10Z

> **[webbo skrev:](https://www.webforum.nu/p/1540822)**
>
> Hmm, borde kunna använda funktionen [preg_match_all](http://www.php.net/manual/en/function.preg-match-all.php), men hur ska mitt pattern se ut? Hmm... Någon?

Någon regexp-expert där ute?

Permalänk: https://www.webforum.nu/p/2283782

## #4 — webbo, 2011-10-06T11:30Z

Så här ser ju en FK rad ut (ur SHOW CREATE TABLE vyn):

> CONSTRAINT \`host_contacts_ibfk_1\` FOREIGN KEY (\`updated_by_id\`) REFERENCES \`users\` (\`id\`) ON DELETE SET NULL

Borde jag inte kunna få ut att sådana rader m.h.a. detta regexp:

```php
		
$fk_pattern = "/CONSTRAINT `[a-z0-9_]` FOREIGN KEY \(`[a-z0-9_]`\) REFERENCES `[a-z0-9_]` \(`[a-z0-9_]`\) ON DELETE [a-z ]/";
		
preg_match_all($fk_pattern, $table_structure, $fks);
```

Alla foreign keys ska alltså lagras i arrayen $fks, men jag får ett tomt resultat...

Vad är felet?

Permalänk: https://www.webforum.nu/p/2283783

## #5 — LarsG, 2011-10-07T07:57Z

```
select constraint_name
  from information_schema.key_column_usage
 where table_name = 'host_contacts'
    and column_name = 'host_id'
```

Permalänk: https://www.webforum.nu/p/2283799

---

Tråden på webben: https://www.webforum.nu/amne/php/188045-hämta-ut-foreign-key-name-ur-mysql-databastabell
