Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
andrepcg

exportar rows para ficheiros txt

Recommended Posts

andrepcg

queria criar um script que fizesse query à BD e que transportasse os resultados obtidos para um novo ficheiro txt, uma row por linha.

vai correr um cronjob ao final de cada dia e perante o dia do ano (03.04.2010) iria criar um ficheiro txt com o nome 03042010.txt e iria inserir os resultados dessa query para o ficheiro.

atenção que cada query retorna muitas rows para um txt.

alguem me consegue ajudar? estou com mais dificuldades na parte de fazer a query e transportar os resultados para o txt. obrigado malta


Manda piadas secas por telefone - Piadas.secas.club

Share this post


Link to post
Share on other sites
andrepcg

nao, nao tenho. nao sei a melhor maneira de fazer isto... cada query retorna mais de 1000 rows e tenho de as transportar para um txt diferente todos os dias com a data do dia.


Manda piadas secas por telefone - Piadas.secas.club

Share this post


Link to post
Share on other sites
andrepcg

entao faço um select e depois uso while para cada row da tabela e entao uso o file_put_contents dentro do while, certo?


Manda piadas secas por telefone - Piadas.secas.club

Share this post


Link to post
Share on other sites
andrepcg

$today_date = date('d.m.Y');

$queryi = mysql_query("SELECT * FROM blablabla") or die(mysql_error());

$file = "$today_date.txt";

while($row = mysql_fetch_array($queryi))
{
$put = "".$row['blabla']."\n";
file_put_contents($file, $put);


}

o codigo está a criar um ficheiro com apenas a ultima linha do select. se fizer um echo dentro do while, ele escreve todos os reultados da query na pagina mas só o ultimo da query é que é escrito no ficheiro. o que se passa?


Manda piadas secas por telefone - Piadas.secas.club

Share this post


Link to post
Share on other sites
scorch

Tenta assim:

$today_date = date('d.m.Y');

$queryi = mysql_query("SELECT * FROM blablabla") or die(mysql_error());

$file = "$today_date.txt";

while($row = mysql_fetch_array($queryi))
{
        $put .= "".$row['blabla']."\n";   
       
}
file_put_contents($file, $put);


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
scorch

Faz um echo à variável $put antes da função file_put_contents, mas depois do ciclo.


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
andrepcg

fazendo echo a variavel $put, fora do ciclo, retorna o ultimo valor da query, o mesmo que está a ser guardado no ficheiro.

se fizer echo a variavel $put dentro do ciclo, retorna todos os valores da query, como seria de esperar.


Manda piadas secas por telefone - Piadas.secas.club

Share this post


Link to post
Share on other sites
scorch

Sinceramente não percebo. Mas tenta de outra forma:

$today_date = date('d.m.Y');

$queryi = mysql_query("SELECT * FROM blablabla") or die(mysql_error());

$file = "$today_date.txt";

while($row = mysql_fetch_array($queryi))
{
        $put = $put."".$row['blabla']."\n";  
       
}
file_put_contents($file, $put);


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
andrepcg

guess what? it worked yoda.

obrigado a todos pela vossa colaboração

agora para ficar a perceber bem o que aconteceu, porque é que definir o $put fora do ciclo fez isto resultar?


Manda piadas secas por telefone - Piadas.secas.club

Share this post


Link to post
Share on other sites
softklin

Tem a ver com o chamado escopo de variáveis. Uma variável definida num ciclo apenas funciona dentro dele, nalgumas linguagens. Surpreendentemente, no PHP também funciona nessa forma, fiquei a descobrir isso neste tópico. Fico espantado com isso devido à ausência de declaração de variáveis.

O primeiro código que tinhas, andrecpg, só falhou porque a função file_put_contents apaga todo o conteudo do fichiero antes de o escrever. Se usasses, por exemplo, fwrite, ou o file_put_contents com a opção FILE_APPEND (ver manual), já funcionaria.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
scorch

softclean, isso funcionaria, mas o script ficaria mais lento de estar sempre a abrir conexão, editar o ficheiro, e fechar a conexão, quando tudo isso poderia ser feito de uma vez só. ;)


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.