Listar valores possiveis de um campo tipo "enum" com PHP
Autor: Fernando Oliveira | Publicado: 2010-07-09T18:57:00-07:00

Para quem não sabe o que é "tipo enum", ele é um dos tipos de dados existentes no MySQL onde você pré-define quais são os valores que poderão ser armazenados. Como exemplo poderíamos ter uma tabela chamada "disciplina" que contém um campo chamado "status" onde esse campo só aceita os valores 'aprovado' ou 'reprovado'. Para isso esse campo seria criado assim:


status enum('aprovado', 'reprovado');

Dessa forma ele aceitaria apenas um dos dois valores.


Em algumas situações é necessário saber, a partir do PHP, quais são esses valores possíveis para o campo, como por exemplo, para a criação de um formulário dinâmico. Para isso criei a função abaixo que recebe o nome da tabela e o campo enum e retorna um array com todos os valores possíveis para esse campo.

Veja:


//RECEBE O NOME DA TABELA E DO CAMPO ENUM E RETORNA SEUS VALORES POSSIVEIS
&lt;?php 
function get_valores_enum($tabela, $campo){ &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;$query = "describe $tabela;";
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp; $conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);

&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;$result = $conn-&gt;query($query);
&nbsp;&nbsp;&nbsp;$campos = array();
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;$i = 0;
&nbsp;&nbsp;&nbsp;while($registro = $result-&gt;fetch(PDO::FETCH_ASSOC)){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;$campos[$i]["campo"] = $registro['Field'];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;$campos[$i]["tipo"] = $registro['Type'];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;$i++;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;$valores_explode = array();
&nbsp;&nbsp;&nbsp;//Percorre os nomes e tipo de array até achar o campo passado e se ele for do tipo enum
&nbsp;&nbsp;&nbsp;foreach($campos as $chave){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;$tipo = substr($chave["tipo"], 0, 4);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if($chave["campo"] == $campo &amp;&amp; $tipo == "enum"){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$valores = substr($chave["tipo"], 5, -1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$valores_explode = explode(",", $valores);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$i = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$valores_possiveis = array();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;while(!is_null($valores_explode[$i])){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$valores_possiveis[] = substr($valores_explode[$i], 1, -1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$i++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return $valores_possiveis; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}elseif($chave["campo"] == $campo &amp;&amp; $tipo != "enum"){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo "O campo informado não é do tipo enum!";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return(0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;echo "Campo não encontrado!";
}
?&gt; 
Um exemplo de uso da função poderia ser:

&lt;?php&nbsp;&nbsp;&nbsp;&nbsp; $valores_possiveis = get_valores_enum("disciplina", "status");&nbsp;&nbsp;&nbsp;&nbsp; //pegaria os valores possíveis para o campo "status" na tabela "disciplina"
&nbsp;&nbsp;&nbsp;&nbsp; //Para ver o conteudo do array podemos usar&nbsp;&nbsp;&nbsp;&nbsp; print_r($valores_possiveis);?&gt;
É isso ae, qualquer dúvida deixe o seu comentário que assim que eu responderei assim que vê-lo!

Até a próxima!