View Full Version : Obter comment do field de 1 tabela MySql
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 :)
AliFromCairo 10-09-2007, 16:30 Boas, tens várias maneiras de fazer isso:
SHOW FULL COLUMNS FROM tabela;
ou
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,,,
AliFromCairo 10-09-2007, 21:15 $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:
$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 ?
AliFromCairo 11-09-2007, 17:10 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 if(!isset($link)){liga();} depois chamo a função campos,,,
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);
}
AliFromCairo 11-09-2007, 18:04 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:
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 ?
AliFromCairo 11-09-2007, 18:32 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:
mysql> SHOW GRANTS;
GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD 'password'
GRANT ALL PRIVILEGES ON `bd`.* TO 'user'@'localhost'
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 ;)
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
AliFromCairo 12-09-2007, 02:20 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.
|
|