Pergunta

Parece-me ir e voltar sobre isso, às vezes, ele trabalha para mim, muitas vezes não e eu não posso descobrir como / porque eu posso fazê-lo funcionar, por vezes, e outras vezes ele não vai .

Eu tenho 5 bancos de dados e necessidade de dados de apoio de cada um deles durante uma rotina de manutenção. Para cada um dos bancos de dados, eu tenho um arquivo externo que contém todo o código de conexão db qual incluo na minha página.

A inclui esta aparência

$SGcon = mysql_connect("localhost","root","");

if (!$SGcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("sGopen", $SGcon);

Para cada banco de dados que fornecem uma varaible diferente, então o próximo banco de dados será

$PTcon = mysql_connect("localhost","root","");

if (!$PTcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("pTsecond", $PTcon);

Então, quando eu chamar minha consulta, eu uso

 
mysql_query($getQuery,  $PTcon);
mysql_query($secondQuery, $SGcon);

O problema que eu estou correndo em é que eu não estou recebendo o banco de dados correto utilizado para a consulta, parece meu script está usando as bases de dados que foi adicionados à página anterior.

Existe uma maneira melhor para mim para mudar a conexão banco de dados para ser usado?

Há muita e para trás entre os bancos de dados como estou comparando dados de um db de dados em outro, então eu estou tentando ser eficiente com isso também.

Graças Pete

Foi útil?

Solução

Por padrão, se você passar os mesmos argumentos para mysql_connect como uma chamada anterior ele vai retornar uma conexão em cache se disponível, em vez de criar um novo. Assim, ambas as consultas estão sendo executados contra qualquer banco de dados que você última passada para mysql_select_db.

Passando new_link=true vai evitar esse comportamento, apesar de conexões de banco de dados pode ser caro assim que você deve tentar manter como poucos aberto quanto possível.

A explicação detalhada para new_link:

Se uma segunda chamada é feita para mysql_connect() com a mesma argumentos, nenhuma nova ligação será estabelecida, mas em vez disso, o link identificador do link já abriu será retornado. o new_link modifica parâmetros esse comportamento e marcas mysql_connect() sempre aberta a nova ligação, mesmo se mysql_connect() foi chamado antes com a mesma parâmetros. No modo de segurança SQL, este parâmetro é ignorado.

Outras dicas

Eu acho que se você fechar a conexão db entre cada consulta que você vai resolver o problema.

E se você está fazendo um monte de comparação entre bancos de dados, então eu iria usar apenas 1 instrução SELECT para consultar todos os bancos de dados ao mesmo tempo.

A menos que haja uma razão específica, você quer manter conexões db tão baixo quanto possível. Eu usaria uma ligação, e escrever um método para estender a funcionalidade do método mysql_query (). Você poderia passá-lo a string SQL, eo nome da tabela, em seguida, a função chama mysql_select_db ($ tableName) e re-usos que mesma conexão para processar o SQL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top