2009-03-20 17 views
7

Parece que no puedo conectarme a mysql con un script php, aunque puedo conectarme bien con phpmyadmin. Creé un usuario con una contraseña y le di los privilegios adecuados para el DB, pero cada vez que lo conecta muere diciendo acceso denegado. Estoy usando xampp en un cuadro de Windows XP. Los cortafuegos están deshabilitados, y he comprobado el nombre de usuario y la contraseña es correcta. Aquí está el código:no se puede conectar a mysql con php

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

¿Los nombres de usuario tienen que estar en un formato específico o algo así?

+0

¿Cómo otorgaste el privilegio? El problema en este caso no es el código php, sino el extremo mysql. La declaración de conexión es correcta. –

Respuesta

13

Tengo la corazonada de que el problema aquí es el host que le concedió, aunque en realidad no es más que una conjetura. Si otorga acceso [email protected]'127.0.0.1 'o la dirección IP real del servidor, no podrá conectarse utilizando el host local como host. Esto se debe al hecho de que cuando "localhost" se especifica como host, php asumirá que desea usar un socket unix en lugar de sockets de red, y en ese contexto 127.0.0.1 no es lo mismo que localhost.

partir de la entrada manual para mysql_connect():

Nota: Cada vez que se especifica "localhost" o "localhost: puerto", como servidor, la biblioteca cliente MySQL anulará esto y tratar de conectarse a una socket local (named pipe en Windows). Si desea usar TCP/IP, use "127.0.0.1" en lugar de "localhost". Si la biblioteca del cliente MySQL intenta conectarse al socket local incorrecto , debe establecer la ruta correcta como Configuración de tiempo de ejecución en su configuración de PHP y dejar en blanco el campo del servidor.

Espero que esto no sea totalmente redundante.:)

0

y se lo dio a los privilegios apropiados para el PP

¿Cómo? ¿Qué servidor usaste para el usuario al otorgarlo?

Esta es la forma en que se hace normalmente:

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

en su caso 'somehost' probablemente debería ser 'localhost' o '127.0.0.1' (ver otro post)

referencia Sintaxis: http://dev.mysql.com/doc/refman/5.1/en/grant.html

0

Esto será un error tipográfico o no ha otorgado privilegios. A veces puede ser alarmantemente difícil detectar estos.

Sugiero que no use phpmyadmin pero descargue una copia de SQLYOG (la edición gratuita de la comunidad es excelente) e intente iniciar sesión con su usuario a través de eso. Una vez que haya diagnosticado el problema, copie/pegue el nombre de usuario/contraseña en su script.

Por cierto, phpmyadmin está bien, pero un programa como sqlyog es generalmente más conveniente, así que vale la pena echarle un vistazo de todos modos, estoy seguro de que se convertirá. Si sqlyog no es del agrado de usted, existen muchas otras alternativas gratuitas y comerciales.

5

He visto esto antes, donde un usuario de mysql inicia sesión a través de php y otro no. Algunas veces el usuario incluso trabaja desde la línea de comandos pero no desde php.

Siempre ha sido lo que Emil está refferiendo dos. Un usuario de mysql es realmente un par de usuario/host. por lo que el usuario megadots @ localhost y el usuario megadots @ mycoolhost se enumeran en la tabla mysql.user como dos registros independientes.

Si puede iniciar sesión desde la línea de comandos, ejecute esta consulta.

SELECT user, host FROM mysql.user 

debería ver la lista completa de usuarios y sus anfitriones.

si reconoce el usuario de phpMyAdmin que está funcionando, mire la columna de host que probablemente sea el host que desea usar.

para restablecer el anfitrión ejecutar estas consultas (! Tener cuidado de hacer esto a su trabajo con la tabla de privilegios que para toda la instalación de MySQL)

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

flush privileges; 

Si ve un registro con el nombre de usuario y% como el anfitrión que tendrá prioridad sobre todo lo demás, si hay múltiples registros para el usuario y% como host para uno de ellos, es posible que el nombre de usuario con% como host tenga una contraseña incorrecta y no importa cuántas veces restablezca la contraseña de username @ localhost no es válido porque se comparará con el nombre de usuario @% al iniciar sesión.

+0

Este era exactamente mi problema también, solo el nombre de usuario siempre podía iniciar sesión sin importar los privilegios sin contraseña, pero cuando se asignaba un pase, no funcionaba en absoluto con '%' como el host. –

2

Si está utilizando Linux, use el administrador de paquetes sinápticos para buscar y descargar todas las bibliotecas y mods que PHP y MySQL necesitan para poder conectarse. Mi problema era que los scripts PHP que se ejecutaban solos funcionaban del lado del servidor, pero cuando intentaba usar scripts PHP para conectarme a MySQL no se conectaba, solo veía una página blanca. Entonces noté que no tenía las bibliotecas de cliente MySQL que PHP usa para conectarse a MySQL. Solo tenía las bibliotecas del servidor MySQL. Una vez que instalé las bibliotecas del lado del cliente y reinicié el servidor apache, mis scripts PHP no tuvieron problemas para conectarse. Por defecto PHP 5 no viene instalado con las bibliotecas del lado del cliente de MySQL.

+1

Instalé un servidor LAMP Ubuntu y desinstalé mysql-core, luego lo reinstalé. Perdió php5-mysql a lo largo de su camino y un 'sudo apt-get install php5-mysql' me tuvo de nuevo en camino. – user898763452

2

En mi caso, resultó que había eliminado el usuario que se utilizó para crear la base de datos que estaba usando. Normalmente esto debería dar el error 'el definidor especificado por el usuario no existe', pero por alguna razón simplemente devolvió el acceso más general denegado a mi código PHP. No estoy seguro de por qué aún puedo iniciar sesión a través de la línea de comandos y otras interfaces. Para corregir mi problema recreé el usuario que se eliminó.

+0

problema similar: la respuesta de Chris Wininger me llevó a mi solución; Instalé mi base de datos respaldada (respaldada por el usuario 'robert') en otra máquina de desarrollo en la cuenta de usuario 'iohann' ...nombre de usuario diferente. Entonces, todo lo que obtuve fue un error críptico de 500 Internal Server. Pero, con la nota del Sr. Wininger en la mano, mientras estaba conectado como usuario 'iohann', restauré la base de datos en una máquina nueva, luego la respaldé inmediatamente y luego la restauré. Todo zumbando después. Me encantaría explicar "por qué" esto funcionó. Claramente, algo que ver con la "firma del usuario" en la copia de seguridad/base de datos. – amalafrida

0

Después de tener un problema similar, encontré que reemplazar '127.0.0.1' con 'localhost' hizo el truco (a pesar de que pude conectarme exitosamente a través del terminal usando 'localhost').

0

Tuve el mismo problema, pero luego me di cuenta de que si deja en las cuentas predeterminadas con '%' (cualquier host), SIN CONTRASEÑA, entonces simplemente no puede conectarse con una contraseña. No estoy seguro de cuál es exactamente el problema, pero eliminarlos lo resolvió.

Cuestiones relacionadas