Pergunta

Eu não consigo conectar ao MySQL com um script php, embora eu pode se conectar bem com phpmyadmin. Eu criei um usuário com uma senha, e deu-lhe os privilégios apropriados para o db, mas toda vez que ele se conecta-lo morre dizendo o acesso negado. Estou usando o xampp em uma caixa de Windows XP. Firewalls são todas pessoas com deficiência, e eu verifiquei a senha nome de usuário nad estão corretas. Aqui está o código:

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

Do nomes de usuário tem que estar em um formato específico ou algo assim?

Foi útil?

Solução

Eu tenho um palpite de que o problema aqui é o host que você concedeu-lhe para, embora não mais é realmente do que um palpite. Se você conceder myuser@'127.0.0.1' acesso ou o endereço IP do servidor real, você não terá permissão para se conectar usando localhost como anfitrião. Isto é devido ao fato de que quando "localhost" é especificado como host, php irá assumir que você quiser usar um unix soquete, em vez de soquetes de rede, e, nesse contexto 127.0.0.1 não é o mesmo que localhost.

A partir da entrada manual para mysql_connect () :

Nota: Sempre que você especificar "localhost" ou "localhost: porta" como servidor, o biblioteca cliente MySQL irá sobrepor isso e tentar se conectar a um local, socket (pipe nomeado no Windows). Se vocês quer usar TCP / IP, use "127.0.0.1" em vez de "localhost". Se o MySQL biblioteca cliente tenta se conectar ao errado socket local, você deve definir o caminho correto como Configuração de Runtime na sua configuração do PHP e licença o campo em branco servidor.

Espero que isso não é totalmente redundante. :)

Outras dicas

Eu já vi isso antes, em que um usuário faz login mysql em via php e outra não. Às vezes, o usuário ainda funciona a partir da linha de comando, mas não de php.

Sempre foi o que Emil está reffering dois. Um usuário mysql é realmente par usuário / host. de modo que os MegaDots usuário @ localhost eo usuário MegaDots @ mycoolhost estão listados na tabela mysql.user como dois discos separados.

Se você pode fazer o login a partir da linha de comando executar esta consulta.

SELECT user, host FROM mysql.user

Você deverá ver a lista completa de usuários e vários daqueles anfitriões.

Se você reconhecer o usuário phpMyAdmin que está trabalhando, olhar para a coluna de host que é provavelmente o host que você deseja usar.

para repor o anfitrião executar essas consultas (! Ter cuidado fazendo este o seu trabalho com o quadro de privilages para toda a instalação mysql)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

Se você ver um registro com o nome de usuário e% como o anfitrião que terá prioridade sobre tudo o mais, se houver vários registros para o usuário e% como o anfitrião para um deles, é possível que o nome de usuário com% como o anfitrião tem a senha errada e não importa como manytimes você redefinir username @ localhost da senha é inválida porque ele vai ser comparado com username @% no login.

Se você estiver usando Linux usar o gerenciador de pacotes Synaptic para encontrar e baixar todas as bibliotecas e mods que o PHP e MySQL precisam para que possam tanto de conexão. Meu problema era que scripts PHP correndo só trabalhou no lado do servidor, mas quando eu tentei usar scripts PHP para se conectar ao MySQL não ligaria eu só iria ver uma página branca lisa. Então eu percebi que não tinha as bibliotecas do cliente MySQL que o PHP usa para conect ao MySQL. Eu só tinha as bibliotecas do servidor MySQL. Uma vez eu instalei as bibliotecas do lado do cliente e reiniciado o servidor apache meus scripts PHP teve nenhum problema de conexão. Por padrão PHP 5 não vem instalado com as bibliotecas do lado do cliente MySQL.

No meu caso, descobriu-se que eu tinha excluído o usuário que foi usado para criar o banco de dados que eu estava usando. Normalmente, isso deve dar o 'usuário especificado definidor não existe' erro, mas por alguma razão ele estava simplesmente devolver o acesso mais geral negado ao meu código PHP. Eu não sei por que eu ainda poderia entrar através da linha de comando e outras interfaces. Para corrigir o meu problema eu recriado o usuário que foi excluído.

Este processo pode ser um erro de digitação ou você não tenha concedido privilégios. Às vezes pode ser assustadoramente difícil de detectar estes.

Eu sugiro não usar phpmyadmin mas baixar uma cópia do SQLyog (a edição comunidade livre é grande) e tentar o login com seu usuário via isso. Depois de ter o problema diagnosticado há copiar / colar nome de usuário de volta / senha para o seu script.

A propósito phpmyadmin é bom, mas um programa como o SQLyog é geralmente mais conveniente, por isso, vale a pena conferir qualquer maneira - eu tenho certeza que você vai ser convertido. Se SQLyog não é bem a seu gosto, existem várias outras alternativas livres e comerciais.

e deu-lhe os privilégios apropriados para o db

Como? O anfitrião foi que você usar para o usuário quando da concessão isso?

Esta é a forma como é feito normalmente:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

no seu caso 'somehost' provavelmente deve ser 'localhost' ou '127.0.0.1' (ver outro post)

Sintaxe de referência: http://dev.mysql.com/ doc / refman / 5.1 / en / grant.html

Depois de ter um problema semelhante achei que a substituição '127.0.0.1' com 'localhost' fez o truque (apesar do fato de que eu era capaz de se conectar com sucesso através do terminal usando 'localhost').

Eu tive o mesmo problema, mas então eu percebi isso que se você deixar nas contas padrão com '%' (qualquer host), nenhuma senha, então você simplesmente não pode se conectar com uma senha. Eu não tenho certeza qual é o problema exatamente, mas removê-los resolvido.

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