Obter comment do field de 1 tabela MySql

silvino

Power Member
Olá,

Directo ao assunto, quando crio um campo numa tabela mysql posso atribuir um comentário, por exemplo vou alterar a tabela maquina, vou adicionar mais um campo com o nome "exemplo" e o comentário é "É um exemplo";

ALTER TABLE `maquina` ADD `exemplo` INT NOT NULL COMMENT 'É um Exemplo';

Agora como acedo ao comment do campo ?

Obrigado :)
 
Boas, tens várias maneiras de fazer isso:

Código:
SHOW FULL COLUMNS FROM tabela;

ou

Código:
SELECT COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE table_schema='schema' AND table_name='tabela' AND column_name='exemplo';

A primeira vai-te devolver toda a informação relativa a todas as colunas da tabela, e exige um trabalho extra para chegares à coluna em questão (os comentários de cada coluna encontram-se na coluna "Column" :-D).

A outra query penso que depende um pouco da versão do MySQL que estás a usar, mas devolve o campo que precisas sem necessitar de pós-processamento.

Espero que ajude.
 
Olá, obrigado pela ajuda, assim já sei o que procurar no google ;)

Mas continuo sem resultados, acho que não tenho erros ora ve como estou a tentar fazer,
as variáveis $tabela e $campo tem o nome correcto atribuido anteriormente,,,


$str = "SELECT column_comment FROM information_schema.columns WHERE table_name = '$tabela' AND column_name LIKE '$campo'";

$q = mysql_query($str,'nomeBD') or die(mysql_error());
$comentario = mysql_fetch_row($q);

if($comentario){
echo "<h2>".$comentario[0]."</h2>";
}else{
echo "<h2>Nada para mostrar</h2>";
}

mysql_free_result($q);

Tb descobri isto
http://www.sitepoint.com/forums/showthread.php?p=3517621
mas não resolve o problema,,,
 
Última edição:
$q = mysql_query($str,'nomeBD')

Boas, esse 'nomeBD' deveria ser o recurso associado à tua ligação, ou seja, a variável onde ficou guardado o resultado da função mysql_connect (isso até deveria dar problemas, pois estás a passar uma string como argumento). Caso queiras seleccionar a BD, usa a função mysql_select_db, algo do género:

PHP:
$connection = mysql_connect('localhost', 'username', 'password') or die(mysql_error());
mysql_select_db('nomeBD', $connection) or die (mysql_error());
// ...
$q = mysql_query($str);
// ...

De qualquer maneira, o segundo argumento da função mysql_query é redundante caso estejas a utilizar apenas uma base de dados (como podes ver no exemplo). Espero que ajude.
 
Olá, sim ajudou,,, Mas continuo as aranhas, Agora devolve este erro

Access denied for user 'silvino'@'%' to database 'information_schema'

O que é isto ? Será da ligação ?
 
Boas, coloca aqui o código que estás a usar desde o momento em que fazes o mysql_connect (removendo os teus dados de acesso) e a query. Já agora, é um alojamento free ou privado ?
 
é um alojamento privado, uando a pagina é carregada ele verfica sempre
PHP:
 if(!isset($link)){liga();}
depois chamo a função campos,,,

PHP:
function liga(){
global $link;
$link = mysql_connect('url', 'silvino', 'pass');
if (!$link) {
    die('Erro ao conectar: ' . mysql_error());
}
mysql_select_db('basededados');
}

function campos(){
global $link;

$tabela="maquina";
$campo="nome";

$str = "SELECT column_comment FROM information_schema.columns WHERE table_name = '$tabela' AND column_name LIKE '$campo'";

echo "<h2>".$str."</h2>";

$q = mysql_query($str) or die(mysql_error());
$comentario = mysql_fetch_row($q);

if($comentario){
    echo "<h2>".$comentario[0]."</h2>";
}else{
    echo "<h2>Nada para mostrar</h2>";
}

mysql_free_result($q);
}
 
Boas, o código parece-me estar ok. O problema está nas permissões. Tenta fazer o login como root, e dar permissões ao user silvino. Algo do género:

Código:
GRANT SELECT ON information_schema.* TO 'silvino'@'%';
 
so tenho um login possivel ... quando acedo ao phpmyadmin com a mesma conta ele permite listar os comentarios dos campos quando visualizo a tabela ... devo entrar em contacto com o administrador e perguntar os dados de acesso para root ?
 
Hmm, que versão do MySQL é que estás a usar ? Testei o teu código aqui e funcionou. Aqui está o resultado das permissões que o user que usei tem:

Código:
mysql> SHOW GRANTS;
GRANT USAGE ON *.* TO [EMAIL="'user'@'localhost'"]'user'@'localhost'[/EMAIL] IDENTIFIED BY PASSWORD 'password'
GRANT ALL PRIVILEGES ON `bd`.* TO [EMAIL="'user'@'localhost'"]'user'@'localhost'[/EMAIL]
 
humm,,, devo confessar que não tenho muita experiencia com mysql, apenas criei um utilizador apartir de um painel de controlo para aceder a base de dados. Não perguntava nada sobre previlegios, a versão do mysql é 4
 
Ey Já resolvi,,, Comecei a experimentar varias formas e consegui um output dos comentarios,,,, é o segundo ciclo for que gera ;)

PHP:
if(!isset($tabela)){
    echo "<h2>Falta de informação para efectuar busca</h2>";
}else{
    $colunas="SHOW FULL COLUMNS FROM ".$tabela;

    if(!isset($campo) or !isset($valor)) {
        $str="SELECT * FROM ".$tabela;
    }else{
        $str="SELECT * FROM ".$tabela." WHERE ".$campo." like '".$valor."%'";
    }

$c=mysql_query($colunas);
$q=mysql_query($str);

$ncol=mysql_num_fields($q)-1;
$nlin=mysql_num_rows($q);

$matris=array(array());
$identi=array();

//index 0 toma valor do comentario campos 
for($y=0;$y<=$ncol; $y++){
    $resc=mysql_fetch_assoc($c);
    $identi[$y]=mysql_field_name($q, $y);
    $matris[0][$y]=$resc['Comment'];
}

mysql_free_result($resc);

//prienche a matris com os valores
for($x=1; $x<=$nlin; $x++){
$resc=mysql_fetch_row($q);
    for ($y=0; $y<=$ncol; $y++){
        $matris[$x][$y]=$resc[$y];
    }
}
Obrigado pela ajuda preciosa
 
Última edição:
humm,,, devo confessar que não tenho muita experiencia com mysql, apenas criei um utilizador apartir de um painel de controlo para aceder a base de dados. Não perguntava nada sobre previlegios, a versão do mysql é 4

Pois, entre a versão 4 e a 5 há bastantes diferenças, e deve ser essa a razão pela qual te aparece aquele erro das permissões (eu testei no mysql 5 e funcionou). Tenta contactar o administrador para fazer o update.

De qualquer maneira, já conseguiste resolver o problema usando a outra query, mas é relativamente mais trabalhoso do que fazendo da outra forma.
 
Back
Topo