Erro MySQL / Apache em consulta PHP MySQL

votos
23

Eu estou recebendo o seguinte erro:

Acesso negado para o usuário 'apache' @ 'localhost' (using password: NO)

Ao usar o seguinte código:

<?php

include(../includes/connect.php);

$query = SELECT * from story;

$result = mysql_query($query) or die(mysql_error());

echo <h1>Delete Story</h1>;

if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)){
          echo '<b>'.$row[1].'</b><span align=right><a href=../process/delete_story.php?id='.$row[0].'>Delete</a></span>';
      echo '<br /><i>'.$row[2].'</i>';
    }
}
else {
   echo No stories available.;
}
?>

O connect.phparquivo contém o meu MySQL conectar chamadas que estão a trabalhar bem com minhas INSERT IGNORE consultas em outra parte do software. Se eu comente a $result = mysql_querylinha, em seguida, ele passa para a instrução else. Então, é essa linha ou o conteúdo do caso.

Fui pesquisar na net para todas as soluções, e mais parecem estar relacionado com muitas conexões MySQL ou que o usuário Estou entrando em MySQL como não tem permissão. Fui verificar ambos. Eu ainda posso realizar minhas outras consultas em outras partes do software, e eu ter verificado que a conta tem as permissões corretas.

Publicado 05/08/2008 em 22:45
fonte usuário
Em outras línguas...                            


11 respostas

votos
10

E se isso importa em tudo, apache @ localhost não é o nome da conta de usuário que eu uso para entrar no banco de dados. Eu não tenho quaisquer contas de usuário com o nome Apache em-los a todos para essa matéria.

Se ele está dizendo 'apache @ localhost' o nome de usuário não está sendo passado corretamente para a conexão MySQL. 'Apache' é normalmente o utilizador que executa o processo httpd (pelo menos em sistemas baseados em Red Hat) e se nenhum nome de utilizador é transmitida durante a ligação MySQL usa quem chama para a ligação.

Se você fizer o direito de conexão em seu roteiro, não em um arquivo chamado, você recebe o mesmo erro?

Respondeu 06/08/2008 em 01:05
fonte usuário

votos
4

Alterar o include () para exigir (). Se o arquivo "connect.php" não pode ser require () d, o script falhará com um erro fatal, enquanto que incluem () somente gera um aviso . Se o nome de usuário que você está passando para mysql_connect () não é "apache", um caminho incorreto para o script de conexão é a maneira mais comum para obter este tipo de erro.

Respondeu 21/10/2008 em 19:30
fonte usuário

votos
2

Gajo a resposta é um grande DUH! que, infelizmente, ele me levou um tempo para descobrir o bem. Você provavelmente tem uma função como dbConnect () e você estiver usando variáveis ​​a partir de um arquivo de inclusão para fazer a conexão. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Bem uma vez que este é dentro de uma função das variáveis ​​do arquivo incluem precisam ser passados ​​para a função, ou então a função não vai saber o que $ dbhost, $ dbuser e US $ dbpass é. Uma maneira de corrigir isso é fazer com que essas variáveis ​​global para suas funções podem buscá-las. Outra solução que não é muito seguro seria escrever para fora você host, usuário e passar a função mysql_connect.

Espero que isso ajude, mas eu tive o mesmo problema.

Respondeu 02/03/2009 em 20:47
fonte usuário

votos
2

O roteiro connect.php realmente fazer a conexão ou ele apenas definir uma função você precisa chamar para criar uma conexão? O erro que você está recebendo é sintomático de não ter uma conexão previamente estabelecida em tudo.

ETA: Também alterar a incluir a um necessita. Eu suspeito que ele não está realmente incluindo o arquivo em tudo. Mas incluem pode falhar silenciosamente.

Respondeu 21/10/2008 em 18:57
fonte usuário

votos
2

Não se esqueça de verificar seus logs de erros de banco de dados. Você deve ser capaz de ver se você está mesmo bater o DB. Se você não for, você deve verificar suas regras de firewall na caixa. Em uma caixa de linux você pode executar iptables -L para obter as regras da lista de firewall.

Caso contrário, será uma questão de acesso puro. Fazer um "select * from mysql.user" para ver se o usuário apache é até mesmo configurar lá. Além disso, eu recomendaria a criação de uma conta especificamente para seu aplicativo em vez de usar apache, uma vez que qualquer outro aplicativo que você criar será executado como apache por padrão, e poderia obter acesso não autorizado ao seu db.

Basta olhar para cima "GRANT" na documentação @ dev.mysql.com para obter mais informações. Se você tem questiosn mais específico sobre db, basta editar a sua pergunta, e eu vou dar uma olhada.

Respondeu 21/10/2008 em 18:53
fonte usuário

votos
2

Será que o usuário apache exigir uma senha para se conectar ao banco de dados? Se assim for, então o fato de que ele diz que "usando a senha: NÃO" me levam a crer que o código está tentando se conectar sem uma senha.

Se, no entanto, o usuário apache não requer uma senha, uma dupla verificação das permissões pode ser uma boa ideia (que você mencionou você já marcada). Ele ainda pode ser benéfico para tentar executar algo parecido com isso em um prompt mysql:

GRANT ALL PRIVILEGES ON `*databasename*`.* to 'apache'@'localhost';

Que a sintaxe deve ser correta.

Fora isso, eu estou tão perplexo como você é.

Respondeu 05/08/2008 em 22:56
fonte usuário

votos
2

Apenas para verificar, se você usar apenas essa parte você receber um erro?

<?php
include("../includes/connect.php");

$query = "SELECT * from story";
$result = mysql_query($query) or die(mysql_error());

Se assim for, você ainda receberá um erro se você copiar e colar uma dessas inserções nesta página, eu estou tentando ver se é local para a página ou que a linha actual.

Além disso, você pode enviar uma cópia das chamadas de conexão (menos senhas), a menos que as inserções de usar exatamente a mesma sintaxe que este exemplo.

Respondeu 05/08/2008 em 22:52
fonte usuário

votos
1

Você se lembrou de fazer:

flush privileges;

Se o usuário não está configurado, então ele vai dar o 'apache' @ 'localhost' erro.

Respondeu 19/09/2013 em 11:46
fonte usuário

votos
1

Você pode fazer um dos seguintes procedimentos:

  • Adicione o usuário "apache" e configuração de seus privilégios de phpmyadmin ou usar mysql em um escudo
  • Diga php para executar mysql_connectcomo outro usuário, alguém que já tem os privilégios necessários (mas talvez não root), procure mysql.default_user no seu arquivo php.ini.
Respondeu 21/06/2009 em 22:06
fonte usuário

votos
1

Apenas para verificar, se você usar apenas essa parte você receber um erro?

Se assim for, você ainda receberá um erro se você copiar e colar uma dessas inserções para este> página, eu estou tentando ver se é local para a página ou que a linha actual.

Além disso, você pode enviar uma cópia das chamadas de conexão (menos senhas), a menos que as inserções> usar exatamente a mesma sintaxe que este exemplo.

Aqui é o que está no arquivo connection.php. I vinculado ao arquivo através de um include da mesma forma como quando eu executar o INSERT IGNORE consultas em outras partes do código.

$conn = mysql_connect("localhost", ******, ******) or die("Could not connect");
mysql_select_db("adbay_com_-_cms") or die("Could not select database");

Vou tentar o INSERT trabalhando IGNORE consulta nesta área para verificar isso.

Quanto aos outros postando sobre a senha de acesso. Eu fiz, como indicado na minha primeira postagem, verifique as permissões. Eu costumava phpMyAdmin para verificar se as permissões para a conta de usuário que eu estava usando estavam corretas. E se isso importa em tudo, apache @ localhost não é o nome da conta de usuário que eu uso para entrar no banco de dados. Eu não tenho quaisquer contas de usuário com o nome Apache em-los a todos para essa matéria.

Respondeu 05/08/2008 em 23:40
fonte usuário

votos
1

Se de fato você é capaz de inserir utilizando as mesmas chamadas de conexão, o problema provavelmente está no usuário "apache" não ter permissões SELECT no banco de dados. Se você tiver phpMyAdmin instalado, você pode olhar para as permissões para o usuário no painel de privilégios. phpMyAdmin também torna muito fácil de modificar as permissões.

Se você só tem acesso à linha de comando, você pode verificar as permissões do banco de dados mysql.

Você provavelmente vai precisar fazer algo como:

GRANT SELECT no myDatabase.myTable TO 'apache' @ 'localhost';

Respondeu 05/08/2008 em 23:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more