Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fernando Nito

[Resolvido] Transferir dados de um banco para outros, sendo os do

Recommended Posts

Olá,

 

possuo um banco chamado telefonica3 com o banco chamado ddd11f, sua estrutura, de uma forma reduzida, é assim:

 

telefonica3 - ddd11f

|nome_______|ddd|telefone|

|YOSSHIHIDE|11_|50115738|

|EDISON____|11_|50115738|

|JOSE______|11_|50115738|

|ALAIDE____|11_|50115738|

|JOAO______|11_|50115738|

 

 

e uma outra vazia chamado telefonica com o banco chamado spf, sua estrutura, de uma forma reduzida, é assim:

 

telefonica - spf

|fis_cliente|fis_ddd1|fis_telefone1|

 

 

Quero transferir os dados da tabela telefonica3 para a tabela telefonica de uma forma dinâmica. Montei o seguinte código:

 


$servidor = "localhost";
$nome_usuario = "root";//Nome do usuário do mysql
$senha_usuario = ""; //Senha do usuário do mysql



$nome_do_banco = "telefonica"; //Nome do banco de dados

$conecta1 = mysql_connect("$servidor", "$nome_usuario", "$senha_usuario", TRUE) or die (mysql_error());
$banco1 = mysql_select_db("$nome_do_banco",$conecta1) or die (mysql_error());


$nome_do_banco2 = "telefonica3"; //Nome do banco de dados

$conecta2 = mysql_connect("$servidor", "$nome_usuario", "$senha_usuario", TRUE) or die (mysql_error());
$banco2 = mysql_select_db("$nome_do_banco2",$conecta2) or die (mysql_error());

$sql = mysql_query("SELECT * FROM ddd11f ORDER BY sql_rowid LIMIT 0,10",$conecta2) or die(mysql_error());



$values = Array();

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

$linha = mysql_fetch_array($sql);

$fis_ddd1           = $linha["ddd"];
$fis_tel1           = $linha["telefone"];
$fis_cliente        = $linha["nome"];

$values[] = "('{$fis_ddd1}','{$fis_tel1}','{$fis_cliente}')";

}

$value = implode( ',', $values );


$sql =  mysql_query("INSERT INTO spf (fis_ddd1,fis_tel1,fis_cliente) VALUES ($value)",$conecta1)or die(mysql_error());


 

O problema é que ele executa, não mostra nenhum erro mas não adiciona nada no banco telefonica.

 

Mandei ecoar a variavel $value e ele mostra certinho mas acaba não adicionando no banco de dados. Podem me ajudar, por favor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernando Nito, passei pelo mesmo problema, só q no meu caso são 4 banco de dados idênticos.No meu caso criei uma classe para manipular essas conexões. Então aconselho a fazer da mesma forma.

 

Uma dica, você só pode se conectar com um banco de dados por vez. Assim você se conect com primeiro banco e realiza a query conecta com segundo banco de dados e realiza novamente a query. Não posso postar toda a classe, prq ainda estou trabalhando nela, mas veja estes trechos para que você possa entender como funciona:

 

$this->database= array(
           'banco1' => array(
               'host' => 'host1',
               'usuario' => 'usuario1',
               'senha' => 'senha1',
               'banco' => 'banco1'
           ),
           'banco2' => array(
               'host' => 'host2',
               'usuario' => 'usuario2',
               'senha' => 'senha2',
               'banco' => 'banco2'
           )
       );

 

como se conectar ao banco de dados:

 

  private function conect_database($database) {
      $this->id = mysql_pconnect($this->database[$database]['host'], $this->database[$database]['usuario'], $this->database[$database]['senha']);
      mysql_select_db($this->database[$database]['banco'], $this->id);
  }

  private function disconnect() {
       mysql_close($this->id);
       $this->id = 0;
   }

  public function query($query, $database) {
      $this->conect_database($database);
      $result = mysql_query($query, $this->id);
      $this->disconnect();
      return $result;
  }

 

em resumo, esta é a parte principal da classe.

 

Boa sorte...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Correto, eu montei o script acima de uma forma que pudesse usar os dois bancos de dados.

 

Num outro modelo anterior, eu consegui passar apenas um dado do banco telefonica3 pro telefonica. Acredito que não seja problema de conexão.

 

O problema ficou adicionar mais de um dado, no banco de dados telefonica3. Não consigo descobrir o problema disso :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja este trecho:

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

$linha = mysql_fetch_array($sql);

$fis_ddd1           = $linha["ddd"];
$fis_tel1           = $linha["telefone"];
$fis_cliente        = $linha["nome"];

$values[] = "('{$fis_ddd1}','{$fis_tel1}','{$fis_cliente}')";

}

$value = implode( ',', $values );

 

tente fazer desta forma:

 

for($i = 0; $i <= 10; ++$i) {
  $linha = mysql_fetch_array($sql);
  $fis_ddd1           = $linha["ddd"];
  $fis_tel1           = $linha["telefone"];
  $fis_cliente        = $linha["nome"];

  mysql_query("INSERT INTO spf (fis_ddd1,fis_tel1,fis_cliente) VALUES ('$fis_ddd1','$fis_tel1','$fis_cliente')",$conecta1)or die(mysql_error());         
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

INSERT INTO 
    `telefonica`.`spf` (
         `fis_cliente`,
         `fis_ddd1`, 
         `fis_telefone1`) 
    select 
         `nome`,
         `ddd`,
         `telefone` 
    from 
         `telefonica3`.`ddd11f`

 

Usei o script:

 

$sql =  mysql_query("INSERT INTO telefonica.spf (fis_ddd1,fis_tel1,fis_cliente) select ddd,telefone,nome from telefonica2.ddd11f")or die(mysql_error());

 

E deu o erro Can't update table 'spf' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente fazer desta forma:

 

for($i = 0; $i <= 10; ++$i) {
  $linha = mysql_fetch_array($sql);
  $fis_ddd1           = $linha["ddd"];
  $fis_tel1           = $linha["telefone"];
  $fis_cliente        = $linha["nome"];

  mysql_query("INSERT INTO spf (fis_ddd1,fis_tel1,fis_cliente) VALUES ('$fis_ddd1','$fis_tel1','$fis_cliente')",$conecta1)or die(mysql_error());         
}

 

 

Exatamente desta forma que adiciona apenas um.

 

Se por exemplo comentar o mysql_query e mandar ecoar o nome, ele lista todos os nomes.

Mas ao executar, com o mysql_query, é adicionado apenas um registro :(

 

restrição do seu banco ae!! você num tem uma trigger restringindo a entrada de dados na tabela spc??

 

O código que montei foi exatamente esse:

 

<?php

$servidor = "localhost";//Geralmente é localhost mesmo
$nome_usuario = "root";//Nome do usuário do mysql
$senha_usuario = ""; //Senha do usuário do mysql

$conecta1 = mysql_connect("$servidor", "$nome_usuario", "$senha_usuario", TRUE) or die (mysql_error());

$sql =  mysql_query("INSERT INTO telefonica.spf (fis_ddd1,fis_tel1,fis_cliente) select ddd,telefone,nome from telefonica2.ddd11f")or die(mysql_error());

?>

 

Fiz algo errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

seleciona o banco q você vai inserir

<?php

$servidor = "localhost";
$nome_usuario = "root";//Nome do usuário do mysql
$senha_usuario = ""; //Senha do usuário do mysql
$nome_do_banco = "telefonica"; //Nome do banco de dados

$conecta1 = mysql_connect("$servidor", "$nome_usuario", "$senha_usuario", TRUE) or die (mysql_error());
$banco1 = mysql_select_db("$nome_do_banco",$conecta1) or die (mysql_error());

$sql =  mysql_query("INSERT INTO telefonica.spf (fis_ddd1,fis_tel1,fis_cliente) select ddd,telefone,nome from telefonica2.ddd11f")or die(mysql_error());

?>

 

Mesmo erro :(

 

Porém, desta vez inseriu também apenas um registro :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi você q criou a tabela telefonica.spf??

veja a estrutura dela se tem alguma restrição

 

Sim, eu que criei. Não coloquei nenhuma restrição:

 

phpmyadmin.JPG

Compartilhar este post


Link para o post
Compartilhar em outros sites

roda diretamente no banco

 

INSERT INTO  
    `telefonica`.`spf` ( 
         `fis_cliente`, 
         `fis_ddd1`,  
         `fis_telefone1`)  
    select  
         `nome`, 
         `ddd`, 
         `telefone`  
    from  
         `telefonica3`.`ddd11f`

Compartilhar este post


Link para o post
Compartilhar em outros sites

roda diretamente no banco

 

INSERT INTO  
    `telefonica`.`spf` ( 
         `fis_cliente`, 
         `fis_ddd1`,  
         `fis_telefone1`)  
    select  
         `nome`, 
         `ddd`, 
         `telefone`  
    from  
         `telefonica3`.`ddd11f`

 

Mesmo erro...

 

phpmyadmin2.JPG

 

Li sobre o erro e não achei nenhuma solução ainda :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Victor Cometti! :clap: :clap: :clap: :clap: :clap:

 

Dei o comando show triggers e tinha uma trigger já criada em um dos bancos, de uma das várias tentativas que fiz. Deletei esta trigger e executei o comando:

 

INSERT INTO  
    `telefonica`.`spf` (  
         `fis_ddd1`,  
         `fis_tel1`,
         `fis_cliente`) 
    select  
         `DDD`,  
         `TELEFONE`,
         `NOME` 	 
    from  
         `telefonica3`.`ddd11f`

 

Funcionou direitinho!

Agradeço também ao romabeckman, e acredito que com essa mesma dica, poderá ajudá-lo, trabalhando diretamente no MySQL, ao invés de trabalhar em uma programação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.