Error HY000/1045: Acceso denegado para el usuario ‘root’ @ ‘localhost’ (usando la contraseña: NO)

error php

Si has recibido el error mysqli_real_connect (): (HY000/1045): Acceso denegado para el usuario ‘root’ @ ‘localhost’ (usando la contraseña: NO) phpMyAdmin intentó conectarse al servidor MySQL y el servidor rechazó la conexión…; aquí intento explicarte como resolverlo.

Tanto para usuarios de Xampp como Lamp, el problema radica en que se esta intentando una conexión a SQL con un usuario que no existe.

Veamos el error:

En el archivo config-db.php, que encontrarás en esta ruta ( /etc/phpmyadmin/config-db.php) existen 2 variables: $ dbuser y $ dbpass, que indican los parámetros de conexión de MySQL.

En el mismo archivo existen otros parámetros importantes que podemos modificar como la dirección del servidor ($ dbserver), el puerto ($ dbport), y otros  que pueden ser de utilidad alterar, ante problemas de conexión.

La solución por tanto, es modificar el config-db.php y configurar su contraseña, con la contraseña que le dio al usuario root , o si no tiene una contraseña, dejarla vacía de este modo ''.

Vaya al archivo config.inc.php y busque – $ cfg ['Servidores'] [$ i] ['auth_type']

Cambie el valor de $ cfg ['Servers'] [$ i] ['auth_type'] a ‘cookie’ o ‘http’.

$cfg['Servers'][$i]['auth_type'] = 'HTTP';

Nota- si elige el tipo de autenticación como cookie, cada vez que cierre el navegador y lo vuelva a abrir, deberá iniciar sesión nuevamente.

Cambie el valor de  $ cfg [‘Servers’] [$ i] [‘password’] a vacio »

$cfg['Servers'][$i]['password'] = ''; <-tu contraseña 

En  $ cfg [‘Servidores’] [$ i] [‘AllowNoPassword’] y cambie su valor a verdadero.

$cfg['Servers'][$i]['AllowNoPassword'] = 'TRUE'; 

Tambien podemos hacerlo desde las funciones para usuario avanzado

/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'tu usuario';
$cfg['Servers'][$i]['controlpass'] = 'tu contraseña'; /* '' para dejar vacio */

En total oscuridad, cualquier cosa puede ser luz

Y

Error grave: error no detectado: llamada a la función no definida mysql_connect ()

error php

Si recibes el error : error no detectado: llamada a la función no definida mysql_connect (), intento explicarte en este post, su solución.

Las funciones de mysql_* se eliminaron a partir de PHP 7.

En su defecto puedes usar: mysqli_connect($mysql_hostname , $mysql_username) en lugar de mysql_connect($mysql_hostname , $mysql_username).

No se recomienda usar la extensión de mysql anterior para nuevos proyectos, ya que al estar obsoleta queda expuesta a problemas de seguridad y compatibilidad serios que arrojarán este error.

Las alternativas que ofrece PHP, son MySQLi y PDO , que es son las que recomiendan los creadores del lenguaje, utilizar. 

PHP ofrece estas tres API diferentes para conectarse a MySQL.

Aquí en un este cuadro tomado de en  it-swarm donde se comparan las API proporcionadas por las extensiones mysql, mysqli y PDO.

Cada fragmento de código crea una conexión a un servidor MySQL que se ejecuta en «example.com» usando el nombre de usuario «username» y la contraseña «password».

<?php
// mysqli
$mysqli = new mysqli("example.com", "username", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:Host=example.com;dbname=database', 'username', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

// mysql
$c = mysql_connect("example.com", "username", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
?>

Otras dos opciones que tiene, quien no desee actualizar son:

Retornar a la versión anterior de PHP, donde funciona el código, en la 5.5, ya estaba obsoleta la api mysql_* 

Emplear una puente  llamado  mysql-shim, que puede hallar en este link.

La idea es incluirlo en tu código con un include, algo asi como:

include_once("choice_shim.php"); 

Y hasta aquí. Esto es todo y espero haber ayudado a alguien.

Gracias

Es tan corto el amor, y es tan largo el olvido

P. Neruda