Aquí podría ser tu PUBLICIDAD


MySQL / Apache Error en la consulta PHP MySQL

votos
23

Estoy teniendo el siguiente error:

Acceso denegado para el usuario 'apache' @ 'localhost' (usando la contraseña: NO)

Al usar 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.phparchivo contiene mis llamadas de conexión MySQL que funcionan bien con mis INSERT IGNORE consultas en otra parte del software. Si comento la $result = mysql_querylínea, pasa a la declaración else. Entonces, es esa línea o el contenido en el if.

He estado buscando soluciones en la red, y la mayoría parecen estar relacionadas con demasiadas conexiones MySQL o que el usuario que estoy iniciando sesión en MySQL no tiene permiso. He verificado ambos. Todavía puedo realizar mis otras consultas en otro lugar del software, y he verificado que la cuenta tiene los permisos correctos.

Publicado el 05/08/2008 a las 22:45
fuente por usuario Mesidin
En otros idiomas...        العربية       

11 respuestas

votos
10

Y si es importante, apache @ localhost no es el nombre de la cuenta de usuario que utilizo para ingresar a la base de datos. No tengo ninguna cuenta de usuario con el nombre apache en ellos para nada.

Si dice 'apache @ localhost', el nombre de usuario no se transfiere correctamente a la conexión MySQL. 'apache' es normalmente el usuario que ejecuta el proceso httpd (al menos en los sistemas basados ​​en Redhat) y si no se pasa ningún nombre de usuario durante la conexión MySQL usa a quien llama para la conexión.

Si haces la conexión correcta en tu script, no en un archivo llamado, ¿obtienes el mismo error?

Respondida el 06/08/2008 a las 01:05
fuente por usuario dragonmantank


Aquí podría ser tu PUBLICIDAD


votos
4

Cambie el include () a require (). Si el archivo "connect.php" no puede ser require () d, el script fallará con un error fatal, mientras que include () solo generará una advertencia . Si el nombre de usuario que está pasando a mysql_connect () no es "apache", una ruta incorrecta al script de conexión es la forma más común de obtener este tipo de error.

Respondida el 21/10/2008 a las 07:30
fuente por usuario Piskvor

votos
2

¡Amigo, la respuesta es un gran DUH! que desafortunadamente también tardé un tiempo en descubrirlo. Probablemente tenga una función como dbconnect () y esté usando variables de un archivo de inclusión para hacer la conexión. $ conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Bien, ya que esto está dentro de una función, las variables del archivo de inclusión deben pasar a la función o la función no sabrá qué $ dbhost, $ dbuser y $ dbpass. Una forma de solucionar esto es hacer que esas variables sean globales para que sus funciones puedan recogerlas. Otra solución que no es muy segura sería escribir su host, usuario y pasar la función mysql_connect.

Espero que esto ayude pero tuve el mismo problema.

Respondida el 02/03/2009 a las 08:47
fuente por usuario Andre

votos
2

¿El script connect.php realmente establece la conexión o solo define una función a la que necesita llamar para crear una conexión? El error que está recibiendo es sintomático de no tener una conexión previamente establecida.

ETA: también cambie el include a a require. Sospecho que en realidad no incluye el archivo en absoluto. Pero include puede fallar silenciosamente.

Respondida el 21/10/2008 a las 06:57
fuente por usuario KernelM

votos
2

No olvide verificar los registros de errores de su base de datos. Debería poder ver si está llegando al DB. Si no lo está, debe verificar las reglas de su firewall en la caja. En un cuadro de Linux, puede ejecutar iptables -L para obtener las reglas de la lista de firewall.

De lo contrario, será un problema de acceso puro. Haga un "select * from mysql.user" para ver si el usuario de apache está configurado allí. Además, recomendaría crear una cuenta específica para su aplicación en lugar de usar apache, ya que cualquier otra aplicación que cree se ejecutará como apache de forma predeterminada y podría obtener acceso no autorizado a su base de datos.

Simplemente busque "GRANT" en la documentación @ dev.mysql.com para obtener más información. Si tiene preguntas más específicas con respecto a db, simplemente edite su pregunta, y lo echaré un vistazo.

Respondida el 21/10/2008 a las 06:53
fuente por usuario Zak

votos
2

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

Sin embargo, si el usuario de apache no requiere una contraseña, puede ser una buena idea verificar los permisos (que ya mencionó que ya verificó). Todavía puede ser beneficioso intentar ejecutar algo como esto en un indicador de mysql:

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

Esa sintaxis debería ser correcta.

Aparte de eso, estoy tan perplejo como tú.

Respondida el 05/08/2008 a las 10:56
fuente por usuario Justin Bennett

votos
2

Solo para verificar, si usas solo esta parte, ¿recibes un error?

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

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

Si es así, ¿todavía recibe un error si copia y pega uno de esos insertos en esta página, estoy tratando de ver si es local a la página o esa línea real.

Además, puede publicar una copia de las llamadas de conexión (menos contraseñas), a menos que las inserciones utilicen exactamente la misma sintaxis que este ejemplo.

Respondida el 05/08/2008 a las 10:52
fuente por usuario Teifion

votos
1

¿Se acordó de hacer:

flush privileges;

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

Respondida el 19/09/2013 a las 11:46
fuente por usuario MoonJoose

votos
1

Puede hacer una de las siguientes cosas:

  • Agregue el usuario "apache" y configure sus privilegios desde phpmyadmin o usando mysql en un shell
  • Dile a php que se ejecute mysql_connectcomo otro usuario, alguien que ya tenga los privilegios necesarios (pero tal vez no sea el usuario root), busca mysql.default_user en tu archivo php.ini.
Respondida el 21/06/2009 a las 10:06
fuente por usuario Moroccan

votos
1

Solo para verificar, si usas solo esta parte, ¿recibes un error?

Si es así, ¿todavía recibe un error si copia y pega uno de esos insertos en esta> página, estoy tratando de ver si es local para la página o esa línea real.

Además, puede publicar una copia de las llamadas de conexión (menos las contraseñas), a menos que las inserciones> usen exactamente la misma sintaxis que este ejemplo.

Aquí está lo que está en el archivo connection.php. Me vinculé al archivo a través de una inclusión de la misma manera que cuando ejecuto las consultas INSERTAR IGNORAR en otro lugar 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 la consulta INSERT IGNORE de trabajo en esta área para verificarlo.

En cuanto a las otras publicaciones sobre el acceso a la contraseña. Lo hice, como se indica en mi primera publicación, compruebe los permisos. Utilicé phpMyAdmin para verificar que los permisos para la cuenta de usuario que estaba usando eran correctos. Y si es importante, apache @ localhost no es el nombre de la cuenta de usuario que utilizo para ingresar a la base de datos. No tengo ninguna cuenta de usuario con el nombre apache en ellos para nada.

Respondida el 05/08/2008 a las 11:40
fuente por usuario Mesidin

votos
1

Si de hecho puede insertar utilizando las mismas llamadas de conexión, su problema probablemente recae en el usuario "apache" que no tiene permisos SELECT en la base de datos. Si tiene instalado phpMyAdmin, puede ver los permisos para el usuario en el panel Privilegios. phpMyAdmin también hace que sea muy fácil modificar los permisos.

Si solo tiene acceso a la línea de comando, puede verificar los permisos desde la base de datos mysql.

Probablemente necesites hacer algo como:

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

Respondida el 05/08/2008 a las 11:02
fuente por usuario NilObject


Aquí podría ser tu PUBLICIDAD