2008-08-05 14 views
24

estoy consiguiendo el error siguiente:MySQL/Apache Error en la consulta PHP MySQL

Access denied for user 'apache'@'localhost' (using password: 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 archivo connect.php contiene mi MySQL conectar llamadas que están funcionando bien con mis consultas INSERT en otra parte del software. Si hago un comentario sobre la línea $result = mysql_query, pasa a la declaración else. Entonces, es esa línea o el contenido en el if.

He estado buscando en la red cualquier solución, y la mayoría parece estar relacionada 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.

Respuesta

12

And if it matters at all, [email protected] is not the name of the user account that I use to get into the database. I don't have any user accounts with the name apache in them at all for that matter.

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 realiza la conexión directamente en su secuencia de comandos, no en un archivo llamado, ¿obtiene el mismo error?

2

Solo para verificar, si usa solo ¿recibe un error?

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

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

Si es así, ¿todavía se produce un error si copia y pega una de esas inserciones en esta página, estoy tratando de ver si es local a la página o que la línea real.

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

2

¿El usuario de apache necesita 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.

Si, sin embargo, el usuario de apache no requiere una contraseña, puede ser una buena idea revisar los permisos (que usted mencionó que ya ha marcado). Todavía puede ser beneficiosa para tratar de ejecutar algo como esto en un símbolo del mysql:

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

que la sintaxis debe ser correcta.

Aparte de eso, estoy tan perplejo como usted.

+0

No creo que sea realmente una buena solución. Es como decir que si construyes un automóvil donde el volante se cae y las personas se estrellan contra los árboles, la solución sería eliminar los árboles. Este es definitivamente un problema con la conexión que no se inicializa correctamente. – nickf

1

Si de hecho puede insertar usando las mismas llamadas de conexión, su problema probablemente se encuentre 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.

Es probable que tenga que hacer algo como:

GRANT SELECT en myDatabase.myTable A 'Apache' @ 'localhost';

1

Just to check, if you use just this part you get an error?

If so, do you still get an error if you copy and paste one of those Inserts into this >page, I am trying to see if it's local to the page or that actual line.

Also, can you post a copy of the connection calls (minus passwords), unless the inserts >use exactly the same syntax as this example.

Esto es 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 INSERT 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 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.

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.

Solo 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.

2

¿El script connect.php realmente hace la conexión o solo define una función 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 incluir a un requiere. Sospecho que en realidad no incluye el archivo en absoluto. Pero include puede fallar silenciosamente.

4

Cambie el include() a require(). Si el archivo "connect.php" no puede ser require() d, la secuencia de comandos 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.

2

¡Dude, 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 establecer 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 pasarse 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.

+0

Gracias! Finalmente resolví las cosas, y me sentí como una gran idiota después. Doh! A veces, tengo mis momentos, supongo. ¡Gracias de nuevo! – Mesidin

1

Usted puede hacer una de las siguientes:

  • agregar el usuario "apache" y la configuración de sus privilegios de phpmyadmin o el uso de MySQL en una cáscara
  • Tell php para ejecutar mysql_connect como otro usuario, alguien que ya tiene los privilegios necesarios (pero puede que no sea root), busque mysql.default_user en su archivo php.ini.
1

¿Se acordó de hacer:

flush privileges; 

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

+0

Probablemente su respuesta esté mejor dada como un comentario. – boisvert

Cuestiones relacionadas