Script mysql

likx

Power Member
Boa tarde, tenho uma pequena grande dúvida, com scripts em mysql. O meu problema é o seguinte, tenho uma base de dados que converti de access para mysql, e agora o problema que me surgiu foi na uniformização dos dados (ex: no campo nome, tenho alguns nome tudo em maiúsculas, e alguns nomes com maiúsculos lá pelo meio) sei que proceder as alterações à mão, pois as tabelas tem poucos registos, mas aconselharam-me a criar um script para a automatização desse processo.
Não sei se perceberam o meu problema, será que alguém me pode ajudar? Obrigado
 
Obrigado pela resposta, e segui a tua sugestão, e ai encontrei a funçao que queria, a ucwords()

Agora o problema é a linguagem, pois é a 1ª vez que vou para o php, pelo menos ja consigo fazer a ligaçao à BD :D
 
Obrigado pela resposta, e segui a tua sugestão, e ai encontrei a funçao que queria, a ucwords()

Agora o problema é a linguagem, pois é a 1ª vez que vou para o php, pelo menos ja consigo fazer a ligaçao à BD :D

Humm... vê se isto ajuda:

@mysql_connect("bla","bla","bla") or die("erro a ligar à bd"); //a tua ligação.

depois de ligar à BD precisas de selecionar a tabela que queres:

@mysql_select($tabela) or die("erro");

$sql = "SLECT * FROM 'base_de_dados'.'tabela'";

$resultado = mysql_query($sql) or die("impossivel listar dados");

depois buscas o numero de linhas da tabela

$total_linhas=mysql_num_rows($resultado);


depois um ciclo para percorreres todas as linhas e alterares cada uma

for ($i=0; $i<$total_linhas; $i++;) {

//colocas o ponteiro na linha certa (podes usar o mysql_fetch_array)

$dados_original = mysql_result($resultado, $i, "campo_da_tabela"); //buscas o campo

$dados_temp=ucwords($dados_original); //alteras o campo

agora é só fazeres o update à bd. algo como (visto que tens o ponteiro na linha certa, nao seria necessario o WHERE, mas pela via das duvidas usa na mesma)

$sql = "UPDATE 'base_de_dados'.'tabela' SET 'capo_da_tabela'=$dados_temp WHERE 'campo_da_tabela=$dados_original";

mysql_query($sql) or die("impossivel aterar");

//ok, linha alterada, vamos continuar com o ciclo.
//ATENÇãO, SE A TUA TABELA FOR ENORME ISTO VAI DEMORAR ALGUM TEMPO! DEPENDENDO PRINCIPALMENTE DA VELOCIDADE DE RESPOSTA DO TEU SERVIDOR MYSQL//

}

pronto, depos fazes isso para cada tabela, mudas apenas o "campo_da_tabela" para o campo que queres alterar, neste exemplo apenas altero um campo na tabela, para alterar mais é só seguires a lógica. (buscar para variaveis os outros campos, e altera-los e depois junta-los na intrução sql para gravar).

Espero que te safes :)

um abraço.
 
Queria agradecer a ajuda que me foi dada, e ate gostei, pois eu andava a ver essas funções assim por alto para ver se era mesmo isso. Mas já adaptei o código e mesmo assim não faz nada.
Alterei a parte da ligação ao servidor pelo que eu tinha aqui fiz alguns echo e não apareceu nada. Não sei mesmo o que se passa, será que alguém me dá outra vez uma mãozinha.

<?php
/*
@mysql_connect("localhost","root","root") or die("erro a ligar à bd"); //ligação.

@mysql_select($db1) or die("erro")
*/
// Ligação a BD
$link = mysql_connect('localhost', 'root', 'root');
if (!$link) {
die('Não foi possivel efectuar a ligação: ' . mysql_error());
}
echo "Ligacao efectuada com sucesso\n";
//Escolher a BD
mysql_select_db('db1') or die('Não foi possivel seleccionar a BD');

$sql = "SELECT * FROM 'db1'.'aluno'";

$resultado = mysql_query($sql) or die("impossivel listar dados");

//buscar o numero de linhas da tabela

$total_linhas=mysql_num_rows($resultado);

//ciclo para percorrer todas as linhas e alterar cada uma

for ($i=0; $i<$total_linhas; $i++ {

//coloca ponteiro na linha certa (podes usar o mysql_fetch_array)

$dados_original = mysql_result($resultado, $i, "Nome"); //buscas o campo

$dados_temp=ucwords($dados_original); //alteras o campo

$sql = "UPDATE 'db1'.'aluno' SET 'Nome'=$dados_temp WHERE 'Nome'=$dados_original";

mysql_query($sql) or die("impossivel aterar");

}

// Fechar ligacao
mysql_close($link);
?>
 
Queria agradecer a ajuda que me foi dada, e ate gostei, pois eu andava a ver essas funções assim por alto para ver se era mesmo isso. Mas já adaptei o código e mesmo assim não faz nada.
Alterei a parte da ligação ao servidor pelo que eu tinha aqui fiz alguns echo e não apareceu nada. Não sei mesmo o que se passa, será que alguém me dá outra vez uma mãozinha.

<?php
/*
@mysql_connect("localhost","root","root") or die("erro a ligar à bd"); //ligação.

@mysql_select($db1) or die("erro")
*/
// Ligação a BD
$link = mysql_connect('localhost', 'root', 'root');
if (!$link) {
die('Não foi possivel efectuar a ligação: ' . mysql_error());
}
echo "Ligacao efectuada com sucesso\n";
//Escolher a BD
mysql_select_db('db1') or die('Não foi possivel seleccionar a BD');

$sql = "SELECT * FROM 'db1'.'aluno'";

$resultado = mysql_query($sql) or die("impossivel listar dados");

//buscar o numero de linhas da tabela

$total_linhas=mysql_num_rows($resultado);

//ciclo para percorrer todas as linhas e alterar cada uma

for ($i=0; $i<$total_linhas; $i++ {

//coloca ponteiro na linha certa (podes usar o mysql_fetch_array)

$dados_original = mysql_result($resultado, $i, "Nome"); //buscas o campo

$dados_temp=ucwords($dados_original); //alteras o campo

$sql = "UPDATE 'db1'.'aluno' SET 'Nome'=$dados_temp WHERE 'Nome'=$dados_original";

mysql_query($sql) or die("impossivel aterar");

}

// Fechar ligacao
mysql_close($link);
?>


á primeira vista, se esse codigo é exactamente o que tens no php, tem um erro, e um "alert" que não referi.

o erro: //ciclo para percorrer todas as linhas e alterar cada uma

for ($i=0; $i<$total_linhas; $i++ {

falta o "(" para fechares o for

correcto:

for ($i=0; $i<$total_linhas; $i++) {

é o suficiente para nao funcionar. esperimenta e só se não funcionar usa o passo seguinte.

Alert: as tuas instruções sql, tenta no final colocares o ";" tipo:

$sql = "UPDATE 'db1'.'aluno' SET 'Nome'=$dados_temp WHERE 'Nome'=$dados_original;";
e
$sql = "SELECT * FROM 'db1'.'aluno';";



esperimenta e depois mostra o que aconteceu.

abraço.
 
tanta volta que dei e não reparei no "(", sim agora já efectua a ligação à BD, mas diz que é impossível listar dados, e já tentei das 2 maneiras que sugeriste com ";" e sem ";"
 
tanta volta que dei e não reparei no "(", sim agora já efectua a ligação à BD, mas diz que é impossível listar dados, e já tentei das 2 maneiras que sugeriste com ";" e sem ";"
pois, dependendo da versão mysql que tenhas, mas tenta só na string sql:

$sql="SELECT * FROM 'aluno';"; //não coloque o db1.alunos, como já o mandaste selecionar a bd, ele pode estar a stressar com o db1., e a tua tabela é "aluno" ou "alunos"?, e testa primeiro sem o ";" vê isso com atenção.

abraço.
ps: estas a levar uma seca exaustiva de mysql! :)
 
Última edição:
tanta volta que dei e não reparei no "(", sim agora já efectua a ligação à BD, mas diz que é impossível listar dados, e já tentei das 2 maneiras que sugeriste com ";" e sem ";"

SELECT * FROM db1.aluno ou
SELECT * FROM aluno

arruma com essas plicas ou lá como se chamam.

usa plicas quando estiveres a inserir, comparar algo
ex: SELECT * from aluno WHERE aluno.id='10'
 
SELECT * FROM db1.aluno ou
SELECT * FROM aluno

arruma com essas plicas ou lá como se chamam.

usa plicas quando estiveres a inserir, comparar algo
ex: SELECT * from aluno WHERE aluno.id='10'


ui ui, agora que falas nessas plicas, é verdade e bem verdade que aquilo não funcionasse, já que não era plicas que deviam la estar, mas sim "`"

ERRO GRAVE MEU!

A sintaxe mysql correcta é mesmo

SELECT * FROM `db1`.`aluno`
e mais abaixo onde tenho as 's substitui pelo acento "`".

ora por isso peço desculpa, é o que dá afastar-me um bocado de mysql :)

abraços e desculpa pelo erro.
 
Efectuei as alterações todas que recomendaram, e continuou a não funcionar, pois aparecia o erro de que era impossível alterar, mas depois alterei também por `no nome aqui:

$dados_original = mysql_result($resultado, $i, `Nome`);

Depois de esta alteração funcionou, e até apareceram umas janelas da linha de comando, mas fui verificar à BD e o campo nome não tinha sido alterado.
 
Efectuei as alterações todas que recomendaram, e continuou a não funcionar, pois aparecia o erro de que era impossível alterar, mas depois alterei também por `no nome aqui:

$dados_original = mysql_result($resultado, $i, `Nome`);

Depois de esta alteração funcionou, e até apareceram umas janelas da linha de comando, mas fui verificar à BD e o campo nome não tinha sido alterado.


Apareceram umas janelas da linha de comandos??? isso não é normal... mas janelas de q?
estranho...

outra coisa, coloca um echo $dados_original; antes e a seguir à tranformação ucwords e vê o que te apresenta como dados para ver se a operação esta a ser bem feita.

um abraço.
 
Bem, quando fiz o echo, só me apareceram os numeros de aluno e não os nomes, mas fui a 1ª expressão de sql e fiz um SELECT `Nome` em vez de SELECT *

Com esta alteração já aparece o 1º nome que esta na BD, mesmo com um segundo echo a seguir ao ucwords, só aparece a mensagem de erro "impossível alterar ".

Mais uma vez deixo aqui o codigo:
<?php
/*
@mysql_connect("localhost","root","root") or die("erro a ligar à bd"); //ligação.

@mysql_select($db1) or die("erro")
*/
// Ligação a BD
$link = mysql_connect('localhost', 'root', 'root');
if (!$link) {
die('Não foi possivel efectuar a ligação: ' . mysql_error());
}
echo "Ligacao efectuada com sucesso\n";
//Escolher a BD
mysql_select_db('db1') or die('Não foi possivel seleccionar a BD');

$sql = "SELECT `Nome` FROM `db1`.`aluno`;";

$resultado = mysql_query($sql) or die("impossivel listar dados");

//buscar o numero de linhas da tabela

$total_linhas=mysql_num_rows($resultado);

//ciclo para percorrer todas as linhas e alterar cada uma

for ($i=0; $i<$total_linhas; $i++) {

//coloca ponteiro na linha certa (podes usar o mysql_fetch_array)

$dados_original = mysql_result($resultado, $i, `Nome`); //buscas o campo
echo "$dados_original";
$dados_temp=ucwords($dados_original); //alteras o campo
echo "$dados_original";
$sql = "UPDATE `db1`.`aluno` SET `Nome`=$dados_temp WHERE `Nome`=$dados_original;";

mysql_query($sql) or die("impossivel alterar");

}

// Fechar ligacao
mysql_close($link);
?>


As janelas não sei explicar, só sei que agora já só aparece 1 janela, aparece e desaparece logo a seguir, mas deve ser normal, acho eu
 
tenta no final:

$sql = "UPDATE `aluno` SET `Nome`='$dados_temp' WHERE `Nome`='$dados_original';";

ou em ultimo caso

$sql = "UPDATE `aluno` SET `Nome`='$dados_temp' WHERE `Nome` LIKE $dados_original";


See what you get!

vê no que dá.
 
Houve progressos, pois assim já escreve na BD, o problema é que escreveu $dados_original em todos os campos, também não sei se foi com LIKE ou sem LIKE, pois só me lembrei de ir verificar à BD depois de ter tentado com as 2 versões e de ter verificado nos echo que so aparecia $dados_original
 
Houve progressos, pois assim já escreve na BD, o problema é que escreveu $dados_original em todos os campos, também não sei se foi com LIKE ou sem LIKE, pois só me lembrei de ir verificar à BD depois de ter tentado com as 2 versões e de ter verificado nos echo que so aparecia $dados_original

lol :)

escreveu dados_original ??? ou dados_temp ???

se foi $dados_original, o teu ucwords está mal, se foi $dados_temp o problema é da instrução de escrita sql.. verifica isso.

abraço.
 
Bem, o erro está explicado, fiz a alteração um bocado à pressa pois ia passar o fim de semana a casa, e só hoje é que reparei que não tinha coloca ao plica em '$dados_original' :D
 
Já está resolvido, o problemas estava mesmo nos nomes escritos a maiúsculas, pois o ucwords só funciona se a string estiver em minúsculas. Só foi preciso colocar dentro do ucwords o strtolower

$dados_temp=ucwords(strtolower(&dados_original));

Agora queria agradecer principalmente ao msdevweb e ao mcog_blaster pela ajuda que me deram neste meu problema.
 
Back
Topo