Pregunta

Recibo el siguiente error:

Access denied for user 'apache'@'localhost' (usando la contraseña:NO)

Cuando se utiliza el siguiente 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.";
}
?>

El connect.php el archivo contiene mi MySQL conectar las llamadas que están trabajando muy bien con mi INSERT consultas en otra parte del software.Si yo comente la $result = mysql_query línea, a continuación, pasa a través de la instrucción else.Así, es que la línea o el contenido en si.

He estado buscando en la red para cualquier solución, y la mayoría parecen estar relacionados con demasiadas conexiones de MySQL o que el usuario estoy de registro en MySQL como no tiene permiso.He comprobado tanto.Todavía puedo realizar mis otras consultas en otros lugares en el software, y he comprobado que la cuenta tiene los permisos correctos.

¿Fue útil?

Solución

Y si importa en absoluto, apache@localhost no es el nombre de la cuenta de usuario que utilizo para entrar en la base de datos.Yo no tengo ninguna cuenta de usuario con el nombre de apache en ellos en todo, para que la materia.

Si él está diciendo: 'apache@localhost' el nombre de usuario no está recibiendo pasa correctamente a la conexión de MySQL.'apache' es normalmente el usuario que ejecuta el proceso httpd (al menos en Redhat-based systems) y si no hay ningún nombre de usuario es pasado durante la conexión a MySQL utiliza a quien está llamando para la conexión.

Si usted hace la conexión a la derecha en la secuencia de comandos, no en el nombre de archivo, ¿se obtiene el mismo error?

Otros consejos

Cambiar el include() para exigir(). Si el "connect.php" archivo no se puede exigir()d, el script va a fallar con un error fatal, mientras que include() sólo genera una advertencia.Si el nombre de usuario que está pasando a mysql_connect() no es "apache", una ruta de acceso incorrecta de conectar el guión es la forma más común para obtener este tipo de error.

No olvides revisar tu base de datos de registros de error.Usted debe ser capaz de ver incluso si usted está golpeando a la DB.Si no, usted debe revisar sus reglas de firewall en el cuadro.En un cuadro de linux puede ejecutar iptables -L para obtener la lista del firewall reglas.

De lo contrario, será un puro problema de acceso.Hacer un "select * from mysql.usuario" para ver si el usuario de apache es, incluso, en no.Además, yo recomiendo crear una cuenta específicamente para su aplicación en contraposición con el uso de apache, desde cualquier otra aplicación que va a crear se ejecute como apache por defecto, y podría obtener acceso no autorizado a tu db.

Solo tienes que buscar "SUBVENCIÓN" en la documentación que @ dev.mysql.com para obtener más información.Si usted tiene más específica questiosn respecto a la db, acaba de editar su pregunta, y voy a echar un vistazo.

¿El connect.php script para hacer realidad la conexión o simplemente tiene que definir una función que necesita para llamar a la creación de una conexión?El error que estás recibiendo es sintomático de no tener previamente establecido conexión.

ETA:También cambiar el incluir a un requieran.Sospecho que es, en realidad, no incluyendo el archivo.Pero incluir puede fallar en silencio.

Amigo la respuesta es un gran DUH!que por desgracia me tomó un tiempo para averiguar así.Usted probablemente tiene una función como dbconnect() y utiliza variables de un archivo de inclusión para realizar la conexión.$conn = mysql_connect($dbhost, $dbuser, $dbpass).

Bien pues este es el interior de una función de las variables del archivo de inclusión deben ser pasados a la función o de lo contrario la función de no se sabe qué es $dbhost, $dbuser y $dbpass es.Una forma de solucionar este problema es hacer que esas variables globales, de manera que las funciones pueden recoger.Otra solución que no es muy seguro sería escribir host, user y pass en la función mysql_connect.

Espero que esto ayude, pero yo tenía el mismo problema.

De hecho, si usted es capaz de insertar utilizando la misma conexión de llamadas, el problema más probable es que se encuentra en el usuario "apache" no tener permisos SELECT en la base de datos.Si usted tiene phpMyAdmin instalado, usted puede mirar los permisos para el usuario en los Privilegios de panel.phpMyAdmin también hace que sea muy fácil para modificar los permisos.

Si sólo tiene acceso a la línea de comandos, usted puede comprobar los permisos de la base de datos mysql.

Usted probablemente tendrá que hacer algo como:

GRANT SELECT ON mibasededatos.myTable A 'apache'@'localhost';

¿Usted recuerda hacer:

flush privileges;

Si el usuario no está configurado entonces se dará el 'apache'@'localhost' error.

Sólo para comprobar, si se utiliza sólo en esta parte se obtiene un error?

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

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

Si es así, ¿sigue usted obtiene un mensaje de error al copiar y pegar una de esas se Inserta en esta página, estoy tratando de ver si es local a la página o que la línea real.

También, puedes publicar una copia de la conexión de llamadas (menos las contraseñas), a menos que las inserciones de utilizar exactamente la misma sintaxis como en este ejemplo.

Sólo para comprobar, si se utiliza sólo en esta parte se obtiene un error?

Si es así, ¿sigue usted obtiene un mensaje de error al copiar y pegar una de esas se Inserta en esta página, estoy tratando de ver si es local a la página o que la línea real.

También, puedes publicar una copia de la conexión de llamadas (menos las contraseñas), a menos que las inserciones >usar exactamente la misma sintaxis como en este ejemplo.

Aquí es lo que está en el connection.php archivo.He enlazado al archivo a través de una inclusión en el mismo de la moda como donde puedo ejecutar las consultas INSERT en otra parte del código.

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

Voy a probar el trabajo de consulta INSERT en esta zona para comprobar que fuera.

En cuanto a los demás acerca de la publicación de la contraseña de acceso.Yo, como dije en mi primera publicación, para comprobar los permisos.He utilizado phpMyAdmin para comprobar que los permisos para la cuenta de usuario que estaba usando eran correctos.Y si importa en absoluto, apache@localhost no es el nombre de la cuenta de usuario que utilizo para entrar en la base de datos.Yo no tengo ninguna cuenta de usuario con el nombre de apache en ellos en todo, para que la materia.

Usted puede hacer uno de los siguientes:

  • Agregar el usuario "apache" y la instalación de sus privilegios en phpmyadmin o el uso de mysql en una concha
  • Decirle a php para ejecutar mysql_connect como otro usuario, alguien que ya tiene los privilegios necesarios (pero tal vez no de la raíz), buscar mysql.usuario_predeterminado en su php.en el archivo ini.

¿El usuario de apache necesita una contraseña para conectarse a la base de datos?Si es así, entonces el hecho de que se dice que "el uso de la contraseña:NO" me llevaría a creer que el código está tratando de conectarse sin necesidad de contraseña.

Si, sin embargo, el usuario de apache no requiere una contraseña, una doble verificación de los permisos puede ser una buena idea (que usted ha mencionado ya comprobado).Todavía puede ser beneficioso para tratar de ejecutar algo como esto en un monitor de mysql:

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

Que la sintaxis debe ser correcta.

Aparte de eso, estoy tan sorprendido como tú.

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