|
| 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
| |
|
|