SQL Yapısı ayrıştırmak için normal İfade

3 Cevap php

Ben "[TABLO] TARİF" tarafından döndürülen MySQL veri türlerini ayrıştırmak çalışıyorum.


: Bu gibi dizeleri döndürür

int(11)
float
varchar(200)
int(11) unsigned
float(6,2)

Düzenli ifadeler kullanarak işi yapmak için denedim ama işe yaramıyor.

PHP KODU:

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

3 Cevap

I wrote code to do this in Zend_Db_Adapter_Mysqli::describeTable().
It handles varchar, char, decimal, float, and all MySQL integer types.

Çünkü StackOverflow adlı CC-wiki lisans politikası burada kodunu gönderebilir, ama o linkten bunu kontrol gitmeyecek.

mysql_fetch_field() yalnızca tabloları kalıcı olmaz, sorgu sonuç kümeleri için veri türlerini raporlar.

INFORMATION_SCHEMA başka bir seçenek, ama bunun MySQL'in erken uygulanması zor hızlı tepki süresi ihtiyacı olan bir web uygulaması kullanmak için yapar inanılmaz kötü performans vardır. MySQL 5.1.23 bazı değişiklikler performansını artırmak için çalıştı, ama bazı insanlar hala sorunları rapor.

Neden sadece alanlara directly meta-veri çekmeyin?

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

Tabloların ve sütunların iç gözlem, ve daha fazlası için information schema sorgula.