/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
ENUM
Fra : Jimmy


Dato : 28-06-04 07:09

Hej

Jeg ønsker at populere et array med værdierne fra et ENUM-felt i en
MySQL-database.

Jeg kan klare det således:

$row = mysql_fetch_array (mysql_query("DESC [TABLE] [COLUMN]));
# Returnerer enum('x','y')

$Arr_Values = explode (",", str_replace ("'", "", substr (substr ($row
['Type'], 5), 0, -1)));
# Returnerer 'x','y'

Ulempen ved ovenstående er, at jeg splitter på komma, som kan forekomme i
værdierne.
Jeg kan heler ikke splitte på "','" da dette også kan forekomme værdierne.

Jeg har prøvet nogle varianter af ovenstende kode, f.eks.
mysql_list_fields() , som har samme ulemper som ovenstående.

Nogen der har en ide?

mvh
Jimmy



 
 
Jacob Atzen (28-06-2004)
Kommentar
Fra : Jacob Atzen


Dato : 28-06-04 07:31

"Jimmy" <nyhedsgruppe2001@SPAM.yahoo.co.uk> writes:

> Hej
>
> Jeg ønsker at populere et array med værdierne fra et ENUM-felt i en
> MySQL-database.
>
> Jeg kan klare det således:
>
> $row = mysql_fetch_array (mysql_query("DESC [TABLE] [COLUMN]));
> # Returnerer enum('x','y')
>
> $Arr_Values = explode (",", str_replace ("'", "", substr (substr ($row
> ['Type'], 5), 0, -1)));
> # Returnerer 'x','y'
>
> Ulempen ved ovenstående er, at jeg splitter på komma, som kan forekomme i
> værdierne.
> Jeg kan heler ikke splitte på "','" da dette også kan forekomme værdierne.
>
> Jeg har prøvet nogle varianter af ovenstende kode, f.eks.
> mysql_list_fields() , som har samme ulemper som ovenstående.
>
> Nogen der har en ide?

Under antagelse, at inddata er:

$string = "'x','y','z'";

Giver følgende vist det du ønsker:

$parts = split("','", $string);
$strippedParts = array_map("stripQuote", $parts);

function stripQuote($string) {
return str_replace("'","",$string);
}

--
Med venlig hilsen
- Jacob Atzen

Johan Holst Nielsen (28-06-2004)
Kommentar
Fra : Johan Holst Nielsen


Dato : 28-06-04 07:48

Jacob Atzen wrote:
> "Jimmy" <nyhedsgruppe2001@SPAM.yahoo.co.uk> writes:
>
>
>>Hej
>>
>>Jeg ønsker at populere et array med værdierne fra et ENUM-felt i en
>>MySQL-database.
>>
>>Jeg kan klare det således:
>>
>> $row = mysql_fetch_array (mysql_query("DESC [TABLE] [COLUMN]));
>> # Returnerer enum('x','y')
>>
>> $Arr_Values = explode (",", str_replace ("'", "", substr (substr ($row
>>['Type'], 5), 0, -1)));
>> # Returnerer 'x','y'
>>
>>Ulempen ved ovenstående er, at jeg splitter på komma, som kan forekomme i
>>værdierne.
>>Jeg kan heler ikke splitte på "','" da dette også kan forekomme værdierne.
>>
>>Jeg har prøvet nogle varianter af ovenstende kode, f.eks.
>>mysql_list_fields() , som har samme ulemper som ovenstående.
>>
>>Nogen der har en ide?
>
>
> Under antagelse, at inddata er:
>
> $string = "'x','y','z'";
>
> Giver følgende vist det du ønsker:
>
> $parts = split("','", $string);
> $strippedParts = array_map("stripQuote", $parts);
>
> function stripQuote($string) {
> return str_replace("'","",$string);
> }

Et eksempel kunne være

ENUM('Jokes\',','Test')

Så er det så spørgsmålet hvor meget styr man har på værdierne i ENUM :)

Og iøvrigt - brug explode() i stedet for split(), når du blot bruger en
string og ikke regular expressions ;)

mvh
Johan



Jimmy (28-06-2004)
Kommentar
Fra : Jimmy


Dato : 28-06-04 08:05


"Johan Holst Nielsen" <phpgeek@gmail.com> wrote in message
news:cboevp$1aaf$1@news.cybercity.dk...

> Et eksempel kunne være
>
> ENUM('Jokes\',','Test')


Præcis - Det er ovenstående problemstilling, jeg søger at løse

Faktisk returneres \ ikke, når man får feltet beskrevet af MySQL.

Mvh
Jimmy



Johan Holst Nielsen (28-06-2004)
Kommentar
Fra : Johan Holst Nielsen


Dato : 28-06-04 08:12

Jimmy wrote:

> Hej
>
> Jeg ønsker at populere et array med værdierne fra et ENUM-felt i en
> MySQL-database.
>
> Jeg kan klare det således:
>
> $row = mysql_fetch_array (mysql_query("DESC [TABLE] [COLUMN]));
> # Returnerer enum('x','y')
>
> $Arr_Values = explode (",", str_replace ("'", "", substr (substr ($row
> ['Type'], 5), 0, -1)));
> # Returnerer 'x','y'
>
> Ulempen ved ovenstående er, at jeg splitter på komma, som kan forekomme i
> værdierne.
> Jeg kan heler ikke splitte på "','" da dette også kan forekomme værdierne.
>
> Jeg har prøvet nogle varianter af ovenstende kode, f.eks.
> mysql_list_fields() , som har samme ulemper som ovenstående.
>
> Nogen der har en ide?

Kan sikkert laves MEGET smukkere :) Men ikke med den tandpine jeg sidder
med :D

<?php
function explodeEnum($str) {
   $output = array();
   $offset = 0;
   $splits = array();
   $cleanStr = substr(substr($str,6),0,-2);
   while($pos = strpos($cleanStr,"','",$offset)) {
      if($cleanStr[$pos-1]!='\\') {
         $splits[] = $pos;
      }
      $offset = $pos+1;
   }
   $start = 0;
   foreach($splits as $s) {
      $output[] = substr($cleanStr,$start,($s-$start));
      $start = ($s+3);
   }
   $output[] = substr($cleanStr,$start); //Get the last one :)
   
   return $output;
}
var_dump(explodeEnum("enum('foo\'\'\',,,\'','bar\',','baz')"));
?>

Håber det hjalp :)

mvh
Johan

Jimmy (30-06-2004)
Kommentar
Fra : Jimmy


Dato : 30-06-04 11:17


"Johan Holst Nielsen" <phpgeek@gmail.com> wrote in message
news:cbogbo$1bg5$1@news.cybercity.dk...

> Kan sikkert laves MEGET smukkere :) Men ikke med den tandpine jeg sidder
> med :D

Det ser rigtigt godt ud - Jeg kan ikke få den til at fejle, så det er jo
herligt.

Mange tak for hjælpen!

Mvh
Jimmy



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste