[PHP/MySQL] values van een enum field uitlezen

Pagina: 1
Acties:
  • 109 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 07:36

decramy

root@birdie:~#

Topicstarter
Hoe kan ik alle mogelijke waardes van een enum field in MySQL de waardes uitlezen en die in een array krijgen?

SQL:
1
2
mysql> DISCRIBE tabel.field;
enum('_blank','_self','_top','_parent')
naar
PHP:
1
array('_blank','_self','_top','_parent');


Ik kan heel vies doen en slopen tot
code:
1
'_blank','_self','_top','_parent'

en dat splitten op comma, maar als ik dan een komma in m`n enum heb, ist niet goed...

Iemand een ID?

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
Split dan op ',' ? =)

PHP:
1
2
3
$enum = "'_blank','_self','_top','_parent'";

$opties = explode( "','", substr( $enum, 1, -1 ) );

Acties:
  • 0 Henk 'm!

  • Obliterator
  • Registratie: November 2000
  • Laatst online: 19-09 14:48
reguliere expressie met preg_match().
Er is vast wel een regexp guru die dit leest.

Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 07:36

decramy

root@birdie:~#

Topicstarter
.Peter schreef op vrijdag 02 september 2005 @ 14:09:
Split dan op ',' ? =)

PHP:
1
2
3
$enum = "'_blank','_self','_top','_parent'";

$opties = explode( "','", substr( $enum, 1, -1 ) );
Maar zoals aangegeven, dat is vrij vies. Is er niet een functie voor?

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
preg_match?

edit:
Spuit 11.. :X Wilde nog een regexje maken, maar daar ben ik niet zo goed in :o

[ Voor 81% gewijzigd door Osiris op 02-09-2005 14:12 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
decramy schreef op vrijdag 02 september 2005 @ 14:10:
[...]

Maar zoals aangegeven, dat is vrij vies. Is er niet een functie voor?
Mwa, zo vies vind ik het niet. Wat is er op tegen dan? Stuk sneller dan een regex iig.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
Als je "enum('_blank','_self','_top','_parent')" uit de database haalt, kan je het toch zo doen;

PHP:
1
2
3
$tekst = "enum('_blank','_self','_top','_parent')";

$opties = explode( "','", substr( $tekst, 6, -2 ) );


en dan kan je met bijv. print_r( $opties ) alle opties bekijken.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

En als je nou zoiets in je enum hebt? :P

'abs\','

Ok de kans is vrij klein (of misschien niet eens mogelijk)... maar daarom is een split gewoon niet netjes.

Een regex zal je hier toch nodig hebben imho wil je een universele bugvrije functie overhouden.

[ Voor 84% gewijzigd door Bosmonster op 02-09-2005 14:28 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Van de user comments op http://dev.mysql.com/doc/mysql/en/enum.html
If you want to get an array in php with all possible values for an ENUM or SET column, you should use: SHOW COLUMNS FROM table_name LIKE 'enum_column_name' (with or without %-wildcards), and parse it with the following php script:
PHP:
1
2
3
4
5
$result=mysql_query($query);
if(mysql_num_rows($result)>0) {
    $row=mysql_fetch_row($result);
    $options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));
}

Now $options is an array with all possible values

Hope it helps.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Bosmonster schreef op vrijdag 02 september 2005 @ 14:25:
En als je nou zoiets in je enum hebt? :P

'abs\','

Ok de kans is vrij klein (of misschien niet eens mogelijk)... maar daarom is een split gewoon niet netjes.

Een regex zal je hier toch nodig hebben imho wil je een universele bugvrije functie overhouden.
Is mischien ook zo, maar ik vind het voorbeeld toch wel een beetje onzin. Het stukje code voldoet imo gewoon in 99,9% van de situaties, en als ie niet voldoet, dan is er toch wel iets heel erg mis gegaan bij het kiezen van namen voor de enum. Als te verwachten dat in vrij normale situaties een stukje code kan breken, dan moet je er rekening mee houden. Anders is het niet echt nodig.

[ Voor 3% gewijzigd door Michali op 02-09-2005 15:24 ]

Noushka's Magnificent Dream | Unity

Pagina: 1