4 Stimmen

Regulärer Ausdruck zum Parsen der SQL-Struktur

Ich versuche, die von "DESCRIBE [TABLE]" zurückgegebenen MySQL-Datentypen zu analysieren.

Sie gibt Zeichenfolgen wie:

int(11)
Schwimmer
varchar(200)
int(11) ohne Vorzeichen
Schwimmer(6,2)

Ich habe versucht, die Aufgabe mit regulären Ausdrücken zu erledigen, aber es funktioniert nicht.

PHP CODE:

$string = "int(11) numeric";<br/>
$regex = '/(\w+)\s*(\w+)/';<br/>
var_dump( preg_split($regex, $string) );<br/>

4voto

Marco Mariani Punkte 13284

Abfrage der Informationsschema für die Introspektion von Tabellen und Spalten, und mehr.

3voto

Byron Whitlock Punkte 51063

Warum nicht einfach Metadaten aus den Feldern ziehen direkt ?

...
$meta = mysql_fetch_field($result, $i);
echo $meta->type;
echo $meta->max_length;

3voto

Bill Karwin Punkte 493880

Ich habe den entsprechenden Code in Zend_Db_Adapter_Mysqli::describeTable() .
Es verarbeitet varchar, char, decimal, float und alle MySQL-Ganzzahltypen.

Ich werde den Code wegen der CC-Wiki-Lizenzpolitik von StackOverflow hier nicht veröffentlichen, aber unter diesem Link können Sie ihn sich ansehen.

mysql_fetch_field() meldet nur Datentypen für Abfrageergebnismengen, nicht für persistierte Tabellen.

INFORMATION_SCHEMA ist eine weitere Option, aber die frühe MySQL-Implementierung hat eine unglaublich schlechte Leistung, was es schwierig macht, sie in einer Webanwendung zu verwenden, die eine schnelle Reaktionszeit benötigt. Mit einigen Änderungen in MySQL 5.1.23 wurde versucht, die Leistung zu verbessern, aber einige Anwender berichten immer noch von Problemen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X