Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtendo erro de acesso negado ao executar mysql_query em php

Atualização final:


Abri uma sessão de bate-papo com o Aditii e fizemos algumas depurações lá.

Acontece que o problema era que ela havia atualizado de um servidor que tinha tags curtas habilitadas para um que não tinha. Como resultado, todo o código dela que estava entre tags curtas não estava sendo executado, e isso incluía seu arquivo de configuração.

O erro na pergunta foi devido ao mysql_connect() função não ser executada porque todo o arquivo não estava sendo executado. Uma mysql_query() chamada que dependia dessa conexão falhou por causa disso.

Depois de corrigir suas tags curtas para usar o <?php completo tag, esse arquivo foi executado. Conforme discutido na minha resposta original a esta pergunta, as aspas simples em torno das variáveis ​​sendo passadas para mysql_connect() acabou causando problemas. Depois de avisar que essas aspas simples fossem removidas, a conexão foi bem-sucedida e o problema foi resolvido.

Toda a sessão de depuração, para todas as partes interessadas, pode ser encontrada aqui .

Primeira atualização:

Depois de olhar um pouco mais de perto, há duas peças que não se encaixam na minha resposta original (que mantive na parte inferior desta resposta, pois ainda contém algumas boas informações).

Primeiro, o erro está sendo acionado por mysql_query() não mysql_connect() . Isso provavelmente ocorre porque não há tratamento de erros em torno da conexão, portanto, o erro não é percebido até mais tarde. Tente adicionar algum tratamento de erros em torno da conexão:
if (!($con = mysql_connect('$localhost','$username','$password'))) {
  echo mysql_error();
}

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

No acima, os erros serão exibidos assim que o erro ocorrer.

A segunda coisa que vejo é que você está se conectando ao localhost com o ODBC do utilizador. Isso não faz sentido se o erro estiver sendo acionado pelo código de conexão mostrado acima. Ou você estaria logando com um usuário chamado $username se o seu problema for o problema de aspas simples que explico abaixo, ou root se você não é.

Parece que o PHP está tentando se conectar com as credenciais padrão para sua configuração do PHP (encontradas em seu php.ini file), em vez das credenciais que você forneceu. Isso me leva a acreditar que as linhas que você está nos mostrando não são realmente as linhas que estão sendo executadas. Tem certeza de que não está tentando se conectar em outro lugar no seu código? Se estiver, suspeito que seu erro esteja nessa parte do código.

Também é possível (eu teria que verificar) que quando você está tentando executar mysql_query() contra uma conexão nula, talvez o PHP esteja tentando criar uma conexão para você. Eu não contaria com isso embora.

Sugiro que você tente executar o código atualizado que forneci acima, que usa o mysql_error() função para mostrar os erros à medida que eles acontecem. Você pode até adicionar algum echo suas próprias declarações nesses blocos, para uma boa e velha depuração de printf.

Resposta original:

O problema é que você está colocando suas variáveis ​​entre aspas simples. Se você colocá-los entre aspas simples, o PHP não avalia a variável para o valor. Por exemplo, em vez de passar root como segundo argumento, você está passando $username . No final, você está tentando fazer login em um servidor chamado $localhost com um usuário chamado $username com uma senha de $password .

Dê uma olhada na página de documentação PHP para Strings . Ele explica isso:

Se você quiser usar variáveis ​​dentro de uma string, você precisa usar double citações, não único. Nesse caso, no entanto, você nem precisa colocar essas variáveis ​​entre aspas, porque seus valores cordas. Você pode simplesmente passar a variável sozinha. Tente isto:
$con=mysql_connect($localhost, $username, $password);
mysql_select_db($dbname, $con);