2010-08-20 2 views
5

Ich versuche, den Kommentar für eine MySQL-Tabelle programmgesteuert abzurufen. Die erste vorgeschlagene Methode war:Was ist die eleganteste Art, einen MySQL-Tabellenkommentar abzurufen?

$shown = $db->query('show create table ' . TABLE_NAME)->fetch_row(); 
preg_match("/COMMENT='(.*)'/", $shown[0], $m); 
$comment = $m[1]; 

Aber diese Art von Workaround bringt mich zum Weinen. Ich stolperte über einen anderen Weg:

$result = $db->query("select table_comment from information_schema.tables where table_schema = '" . 
    DATABASE_NAME . "' and table_name = '" TABLE_NAME '\'')->fetch_row(); 
$comment = $result[0]; 

Es ist ein wenig besser (kein String-Parsing), aber es macht mich immer noch unwohl, weil ich in die internen Strukturen zu graben bin, wo ich fühle mich nicht wie ich gehöre.

Gibt es eine nette, einfache Möglichkeit, um den Tabellenkommentar im Code zu bekommen?

Antwort

3

Informationsschema ist nicht wirklich eine interne Struktur, in die Sie nicht gehören. Es ist Teil des SQL-Standards ANSI und dient dazu, Ihnen eine legitime Möglichkeit zur Abfrage von Metadaten zu geben.

Ich würde nicht zögern, es zu benutzen.

Der einzige Nachteil ist, dass die Implementierung des Informationsschemas von MySQL dazu tendiert, hübsche poor performance zu haben. Seien Sie also vorsichtig beim Ausführen von Abfragen gegen IS in Routinen, die schnell sein sollten.

+0

Cool, ich wusste nicht, dass es tatsächlich Teil eines Standards war. Dennoch versuche ich normalerweise, von Dingen fernzubleiben, die zu "Meta" aussehen, wenn ich ihnen helfen kann ... sie bringen mir nur Kopfschmerzen (zum Beispiel das Leistungsproblem, das du verlinkt hast). – zildjohn01

+0

Da Sie Code für beide Lösungen geschrieben haben, empfehle ich Ihnen, sie zu vergleichen und zu sehen, was der Unterschied in der Leistung ist, und ob dieser Unterschied für Ihre Anwendung tolerierbar ist. –

Verwandte Themen