1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Transferencia de Registos

Discussão em 'Web Development' iniciada por BlkLotus, 30 de Novembro de 2007. (Respostas: 5; Visualizações: 634)

  1. BlkLotus

    BlkLotus Folding Member

    Boas

    Fiz uma loja em osCommerce para um conhecido, onde a maneira que arranjei para importar os mais de 33 mil artigos para dentro da base de dados foi através de um CSV criado pelo software de gestão, e que depois um script que eu fiz em PHP insere os valores que lá estão, na respectiva tabela do osCommerce.

    O código é este:

    PHP:
    <?php

    mysql_connect
    ("localhost""******""******");

    mysql_select_db("*****");

    $abreFicheiro fopen("products.csv""r");

    if (!
    $abreFicheiro){
             echo (
    "<p>Ficheiro não encontrado</p>");
    } else {
             echo (
    "<p>Ficheiro dos produtos foi lido, e transferida a informação</p>");

    while (
    $registos fgetcsv ($abreFicheiro2048";"))  {
    $result mysql_query("insert into products (products_id,products_quantity,products_model,products_image,products_price,products_date_added,products_last_modified,products_date_available,products_weight,products_status,products_tax_class_id,manufacturers_id,products_ordered) values ('$registos[0]','$registos[1]','$registos[2]','$registos[3]','$registos[4]','$registos[5]','$registos[6]','$registos[7]','$registos[8]','$registos[9]','$registos[10]','$registos[11]','$registos[12]')");

    }

    }

    fclose($abreFicheiro);

    ?>
    Está tudo a correr bem, ele importa tudo como deve ser e os artigos que já estão associados as respectivas familias num outro ficheiro aparecem no site, tudo porreiro.

    O PROBLEMA, é que ele só lê até 4775 artigos!!! :wow: Já tentei colocar ficheiros diferentes, alterados, limpo a BD e volto a importar... e nada... chega ao artigo 4775 e ele simplesmente acaba o script e diz que correu tudo bem.

    O que se passa? É algum limite nas configurações do MySQL? É limite de alguma função do PHP que eu não conheço?

    Agradecia alguma ajuda que possam dar, é que são 33 mil artigos, e na loja virtual só estão a aparecer os 4775, o que representa apenas uma pequeníssima parte!

    Btw... eu não percebo muito de programação, praticamente só comecei agora a mexer mais nisto depois de ele me pedir para o fazer, e diga-se de passagem que até estou a gostar e a aprender a cada dia que passa, mas agora ficou-me esta cena "entalada" a meio do caminho e não consigo perceber o porque :'(

    Abraço!
     
    Última edição: 30 de Novembro de 2007
  2. Tyran

    Tyran Power Member

    hmm, estás a dizer que a informação foi transferida antes de o ser porque só abaixo é que o faz...
    no ciclo while verifica se estás a ler tudo do ficheiro, pode ser que seja isso... ah e tira a db password e user, nós não precisamos de ver isso :)
     
  3. BlkLotus

    BlkLotus Folding Member

    Boas

    Exacto, o "echo" que ali está é só para "ingles ver" lol, serve mais para eu verificar apenas se o ficheiro lá está ou não. Penso que para ver se a query deu algum erro ou não, tenho que verificar os erros da variavel "$result".

    De facto é mesmo isso que eu queria saber como fazer, como ver se o ciclo while está a ir até ao fim :'( É que eu estou mesmo a ver que não está, e algures simplesmente termina derrepente. Como posso fazer isso?

    Em relação aos dados, não há problema, pois estes dados são da bd do meu PC, só o user é o mesmo da loja online, tanto a bd como a password são diferentes :P Mas obrigado pelo reparo, porque nem tinha reparado, já editei, thanks!!! :eek:
     
    Última edição: 30 de Novembro de 2007
  4. Tyran

    Tyran Power Member

    lol ja tem * :P
    hmm, no ciclo podes ,por exemplo, acrescentar um $contador++; para veres quantas itenerações faz ou mandar mesmo para um ficheiro de texto o que estás a ler para verificar se é da bd o prob ou não, só uma ideia...
    cumpzz
     
  5. E já viste se não é "timeout" na execução do script php ?

    Por default o timeout são 60 segundos, para inserir 33k acho k o php vai demorar bem mais k 60 segundos...

    Dá uma olhadela no php.ini e aumenta esse tamanho :)
     
  6. oscarolim

    oscarolim Power Member

    Quando colocas folhas numa capa, abres a capa, colocas a folha, fechas a capa e repetes este procedimento para cada folha, ou colocas as folhas todas de uma vez? :p

    Para isso ser mais rapido e eficiente (nao faz sentido abrires e fechares (insert, commit) 30mil vezes), usa este código (demorará qualquer coisa como 2 a 3 segundos a ser executado:

    PHP:

    $query 
    "BEGIN;";
    while (
    $registos fgetcsv ($abreFicheiro2048";"))  {
    $query .= "insert into products (products_id,products_quantity,products_model,products_image,products_price,products_date_added,products_last_modified,products_date_available,products_weight,products_status,products_tax_class_id,manufacturers_id,products_ordered) values ('$registos[0]','$registos[1]','$registos[2]','$registos[3]','$registos[4]','$registos[5]','$registos[6]','$registos[7]','$registos[8]','$registos[9]','$registos[10]','$registos[11]','$registos[12]');";

    }
    $query .= "COMMIT";
    $result mysql_query($query);
    }

     

Partilhar esta Página