Pregunta

Me parece que no puede conectarse a MySQL con un script php, aunque puedo conectar muy bien con phpMyAdmin. He creado un usuario con una contraseña, y se lo di los privilegios apropiados para el PP, pero cada vez que se conecta muere diciendo acceso denegado. Estoy usando XAMPP en un cuadro de Windows XP. Los cortafuegos son desactivados, y he comprobado el nombre de usuario contraseña nad son correctos. Aquí está el código:

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

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

¿Fue útil?

Solución

Tengo el presentimiento de que el problema aquí es el anfitrión que la concedió a, aunque en realidad no es más que una conjetura. Si otorga acceso myuser@'127.0.0.1' o la dirección IP de los servidores reales, no se le permitirá conectarse a través de localhost como anfitrión. Esto se debe al hecho de que cuando se especifica "localhost" como anfitrión, PHP asume que desea utilizar un socket Unix en lugar de las conexiones de red, y en ese contexto 127.0.0.1 no es lo mismo como localhost.

Desde la entrada manual para mysql_connect () :

  

Nota: Cada vez que se especifica "localhost"   o "localhost: puerto", como servidor, el   biblioteca cliente de MySQL anulará   esto y tratar de conectarse a un local de   socket (nombre de tubería en Windows). Si tu   desee utilizar TCP / IP, utilice "127.0.0.1"   en lugar de "localhost". Si el MySQL   biblioteca cliente intenta conectarse a la   mal zócalo local, se debe configurar el   camino correcto como Configuración de tiempo de ejecución   en su configuración de PHP y licencia   en blanco el campo del servidor.

Espero que esto no es totalmente redundante. :)

Otros consejos

He visto esto antes, cuando un usuario inicia una sesión en MySQL a través de php y otra no. A veces, el usuario incluso funciona desde la línea de comandos, pero no de php.

Siempre ha sido lo que se Emil reffering dos. Un usuario de MySQL es realmente par usuario / anfitrión. por lo que los MegaDots usuario @ localhost y los MegaDots usuario @ mycoolhost se enumeran en la tabla mysql.user como dos registros separados.

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

SELECT user, host FROM mysql.user

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

si reconoce al usuario phpMyAdmin que está trabajando, observe la columna host que es probable que el huésped desea utilizar.

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 usted ve un registro con el nombre de usuario y% como el anfitrión que tendrá prioridad sobre todo lo demás, si hay varios registros para el usuario y% como sede de uno de ellos, es posible que el nombre de usuario con% como el anfitrión tiene una contraseña incorrecta y no importa cómo manytimes restablecer la contraseña de usuario @ localhost de que es válido, ya que va a ser comparado con nombre de usuario @% de inicio de sesión.

Si está utilizando Linux utilizan el gestor de paquetes Synaptic para buscar y descargar todas las bibliotecas y mods que PHP y MySQL necesitan para que puedan conectarse tanto. Mi problema era que los scripts PHP que corre solo trabajaron en el lado del servidor, pero cuando he intentado usar scripts PHP para conectarse a MySQL que no se conectaría sólo vería una página blanca. Entonces me di cuenta que no tenía las bibliotecas cliente de MySQL PHP que utiliza para conect a MySQL. Yo sólo tenía las bibliotecas del servidor MySQL. Una vez que he instalado las bibliotecas del lado del cliente y se reinicia el servidor Apache mis scripts PHP no tenía ningún problema de conexión. Por defecto PHP 5 no viene instalada con las bibliotecas de cliente de MySQL.

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 la 'definidor de usuario especificado no existe' error, pero por alguna razón, simplemente devolviendo el acceso más general negado a mi código PHP. No estoy seguro de por qué todavía podía acceder a través de la línea de comandos y otras interfaces. Para corregir mi problema he recreado al usuario de que se ha eliminado.

Esta será ya sea un error tipográfico o no ha otorgado privilegios. A veces puede ser difícil de detectar de forma alarmante éstos.

Le sugiero no utilizar phpmyadmin pero descargar una copia de sqlyog (la edición gratuita de la comunidad es grande) y tratar de iniciar sesión con su usuario a través de eso. Una vez que haya diagnosticado el problema no copiar / pegar nombre de usuario / contraseña de nuevo a su guión.

A propósito phpmyadmin está bien, pero un programa como sqlyog generalmente es más conveniente, por lo que vale la pena ver de todos modos - Estoy seguro de que va a ser convertido. Si sqlyog no es del todo a su gusto hay varias otras alternativas libres y comerciales.

  

y le dio los privilegios adecuados para la db

¿Cómo? Lo anfitrión usó para el usuario cuando su concesión?

Esto es lo 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 / es / grant.html

Después de tener un problema similar que encontraron que la sustitución de '127.0.0.1' con 'localhost' hizo el truco (a pesar del hecho de que yo era capaz de conectarse correctamente a través del terminal usando 'localhost').

Yo tenía el mismo problema, pero luego lo he descubierto que si se deja en las cuentas por defecto con '%' (cualquier host), sin contraseña, entonces simplemente no puede conectar con una contraseña. No estoy seguro de cuál es el problema exactamente, pero la eliminación de ellos lo resolvieron.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top