Je souhaite renseigner automatiquement mes listes déroulantes avec les valeurs possibles d'une base de données enum. Est-ce possible dans MySQL?
Réponses
Trop de publicités?J'ai une version de codeigniter pour vous. Il supprime également les guillemets des valeurs.
function get_enum_values( $table, $field )
{
$type = $this->db->query( "SHOW COLUMNS FROM {$table} WHERE Field = '{$field}'" )->row( 0 )->Type;
preg_match('/^enum\((.*)\)$/', $type, $matches);
foreach( explode(',', $matches[1]) as $value )
{
$enum[] = trim( $value, "'" );
}
return $enum;
}
Vous pouvez obtenir les valeurs comme ceci:
SELECT SUBSTRING(COLUMN_TYPE,5)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='databasename'
AND TABLE_NAME='tablename'
AND COLUMN_NAME='columnname'"
A partir de là, vous devrez le convertir en tableau:
- évaluez cela directement dans un tableau si vous êtes paresseux (bien que l'échappement de guillemets simples de MySQL puisse être incompatible), ou
- $ options_array = str_getcsv ($ options, ',', "'") pourrait éventuellement fonctionner (si vous modifiez la sous-chaîne pour ignorer les parenthèses ouvrantes et fermantes), ou
- une expression régulière
Si vous souhaitez déterminer tous les possibles valeurs pour un ENUM colonne, utilisez AFFICHER Les COLONNES DE nom_table COMME enum_col et d'analyser les ENUM définition dans le Colonne Type de la sortie.
Vous voulez quelque chose comme:
$sql = "SHOW COLUMNS FROM `table` LIKE 'column'";
$result = $db->query($sql);
$row = $result->fetchRow();
$type = $row['Type'];
preg_match('/enum\((.*)\)$/', $type, $matches);
$vals = explode(',', $matches[1]);
Cela vous donnera la cité des valeurs. MySQL retourne toujours ces entourés de guillemets simples. Une seule citation de la valeur est échappé par une apostrophe. Vous pouvez probablement vous en toute sécurité appeler trim($val, "'")
sur chacun des éléments du tableau. Vous aurez envie de covnert ''
en '
.
Cela ressemble à beaucoup de ce qui précède, mais vous donne le résultat sans boucles, ET vous donne ce que vous voulez vraiment: un tableau simple pour générer des options de sélection.
BONUS: Cela fonctionne pour les types de champs SET et ENUM.
$result = $db->query("SHOW COLUMNS FROM table LIKE 'column'");
if ($result) {
$option_array = explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2", $result[0]->Type));
}
$ option_array: Array ([0] => rouge [1] => vert [2] => bleu)
Vous pouvez analyser la chaîne, comme si c'était un fichier CSV (valeurs Séparées par des Virgules) de la chaîne. PHP a une grande accumulation en fonction appelée str_getcsv qui convertit un fichier CSV chaîne dans un tableau.
// This is an example to test with
$enum_or_set = "'blond','brunette','redhead'";
// Here is the parser
$options = str_getcsv($enum_or_set, ',', "'");
// Output the value
print_r($options);
Cela devrait vous donner quelque chose de similaire à la suivante:
Array
(
[0] => blond
[1] => brunette
[2] => redhead
)
Cette méthode vous permet également d'avoir des guillemets simples dans vos cordes (notez l'utilisation de deux guillemets simples):
$enum_or_set = "'blond','brunette','red''head'";
Array
(
[0] => blond
[1] => brunette
[2] => red'head
)
Pour plus d'informations sur le str_getcsv fonction, consultez le manuel PHP: http://uk.php.net/manual/en/function.str-getcsv.php