PHP - Access denied for user 'root'@'localhost'

 
Vista:

Access denied for user 'root'@'localhost'

Publicado por Pablo (44 intervenciones) el 16/05/2019 19:55:38
He creado una aplicación para el registro de visitas, y "funciona", pero solo una vez.

En el formulario de admisión, tengo un select que cargo dinámicamente con los datos de los departamentos a visitar (el responsable cambia con cierta frecuencia, así es que lo actualizo desde un panel de control).

Cuando abro la aplicación, registro al primer visitante, guardo sus datos en la BD, envío una notificación al responsable del depto, y mientras el visitante termina de leer y dar su conformidad a las normas de seguridad, el responsable es notificado por email.

La aplicación vuelve a la hoja de entrada después de dar las gracias (la tenemos en un Kiosko).

Cuando el siguiente visitante pulsa para entrar, la base de datos me da este error:

No se puede conectar con la base de datos: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

Pregunta: ¿Por qué falla si ya conectó la primera vez?

Como uso PDO y ya no tengo la posibilidad de "desconectar", lo que hago es pasar las variables a null que es lo que aconsejan, pero no funciona.

¿Alguien podría orientarme un poco al respecto?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Access denied for user 'root'@'localhost'

Publicado por Kathyu (905 intervenciones) el 16/05/2019 23:31:09
1- No debería usar root. Sino un usuario con privilegios a esa DB.
2- Desconozco como tenga su "PPO" pero puede hacer la llamada a una función de cerrar la conexión desde donde sea.
1
$dbm->desconectar();
3- Que variables pasa a null?
4- Algún código que mostrar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Access denied for user 'root'@'localhost'

Publicado por Pablo (44 intervenciones) el 17/05/2019 06:04:18
¡Vuelvo a agradecerte tu tiempo!.

Tienes razón en cuanto al uso de root como usuario. Lo tengo en una aplicación inocente, pero si luego alguien me la piratea o revienta el malo voy a ser yo por no poner medios.

Con respecto al código, te contesto de memoria:
Tengo una función muy básica que conecta a la BD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function conectaDb()
{
    try {
        $tmp = new PDO(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD);
        return($tmp);
    } catch(PDOException $e) {
        cabecera("Error grave", MENU_PRINCIPAL);
        print "    <p>Error: No puede conectarse con la base de datos.</p>\n";
        print "\n";
        print "    <p>Error: " . $e->getMessage() . "</p>\n";
        pie();
        exit();
    }
}
// Para conectar ...
$db = conectaDB();
 
$consulta = "SELECT * FROM Tabla";
$result = $db->query($consulta);
if (!$result) {
    print "    <p>Error en la consulta.</p>\n";
} else {
    foreach ($result as $valor) {
        print "    <p>$valor[nombre] $valor[apellidos]</p>\n";
    }
}
 
$db = null;
$result = null;

Cuando abro la DB con phpmyadmin y despliego la tabla, me aparece un error de SQL (un pantallazo rosa).

En cambio si hago lo mismo con una de las tablas de sistema no da errores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Access denied for user 'root'@'localhost'

Publicado por Mauro (1044 intervenciones) el 17/05/2019 15:11:08
¿Podrías mostar la pantalla rosa? (O al menos el código de error)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Access denied for user 'root'@'localhost'

Publicado por Kathyu (905 intervenciones) el 17/05/2019 15:48:23
A ver

Primero pone
1
$db = conectaDB();
Y después
1
$db = null;

Verdad? y porque no hace lo que le sugiero arriba una función de desconexión y ya?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Metodo publico para desconectarnos
		public function desconectar(){
			$MySQLi = $this->mysqli;
 
			// Si hay una conexion, la cerramos
			if (isset($MySQLi)) {
                $cerrar = $MySQLi->close();
                // Destruimos la variable
                unset($MySQLi);
                if ($cerrar) {
                    $response = '<hr>Conexion a la Base de Datos Cerrada !!!';
                    // echo $response;
                }
                else{
                    $response = '<hr>La Conexion a la Base de Datos sigue Abierta !!!';
                    // echo $response;
                }
            }
            else{
                $response = '<hr>Conexion no esta definida';
                // echo $response;
            }
		}
 
// Y la llama asi
$dbm->desconectar();

Lo que yo hago es que en cada archivo que procesa una query coloco la llamada a la función de desconectar, asi que cada vez que se hace una query o una interacción con la DB la vuelvo a cerrar y listo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Access denied for user 'root'@'localhost'

Publicado por Mauro (1044 intervenciones) el 17/05/2019 15:09:54
Para cerrar la conexión vía PDO debes poner la referencia en null:

1
2
3
$pdo = new PDO(...);
...
$pdo = null;

Igualmente, esto sucederá en forma automática cuando tu script finalice... no creo que quieras hacerlo mientras estás generando la respuesta al cliente...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar