Предупреждение: mysqli_connect (): (HY000 / 1045): доступ запрещен для пользователя 'username' @ 'localhost' (используя пароль: YES)

24

Предупреждение: mysqli_connect(): (HY000/1045): доступ запрещен для пользователя 'username' @'localhost' (с использованием пароля: YES) в C:\Users\xampp\htdocs\PHP_Login_Script\config.php в строке 6

Предупреждение: mysqli_real_escape_string() ожидает, что параметр 1 будет mysqli, boolean задан в C:\Users\xampp\htdocs\PHP_Login_Script\login.php в строке 10

Предупреждение: mysqli_real_escape_string() ожидает, что параметр 1 будет mysqli, boolean задан в C:\Users\xampp\htdocs\PHP_Login_Script\login.php в строке 11

Предупреждение: mysqli_query() ожидает, что параметр 1 будет mysqli, boolean задан в C:\Users\xampp\htdocs\PHP_Login_Script\login.php в строке 15

Предупреждение: mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, null указан в C:\Users\xampp\htdocs\PHP_Login_Script\login.php в строке 16

Предупреждение: mysqli_num_rows() ожидает, что параметр 1 будет mysqli_result, null указан в C:\Users\xampp\htdocs\PHP_Login_Script\login.php в строке 19

Я получаю эту ошибку выше на локальном хосте, даже если мой файл конфигурации выглядит следующим образом:

<?php

    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "databasename");

    $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

?>

Это работало, но теперь этого больше нет. Есть ли какие-либо проблемы с этим кодом или он не работает сейчас? Это - это учебник, над которым я сейчас работаю.

Теги:
database
phpmyadmin
localhost

18 ответов

14
Лучший ответ

Эта комбинация имени пользователя, хоста и пароля не разрешается подключаться к серверу. Проверяйте таблицы разрешений (при необходимости перезагружая гранты) на сервере и подключайтесь к правильному серверу.

  • 1
    Сэр, я использую только локальный хост, и у меня есть root в качестве имени пользователя и пустого пароля. Я не вижу в этом ничего плохого, потому что до того, как он работает, он устарел? Этот способ кодирования, поэтому он не работает? Использование localhost похоже на тот и root и пустой пароль всегда принимаются
  • 7
    Ваш сервер говорит иначе.
Показать ещё 3 комментария
13

Если вы запускаете обновление wamp

define("DB_HOST", "localhost");

К вашим IP-адресам вашей машины (мой - 192.168.0.25);

define("DB_HOST", "192.168.0.25");

Вы можете найти его в окне, набрав ipconfig в консоли или ifconfig на mac/linux

7

mysqli_connect (DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

используйте DB_HOST вместо DB_SERVER

  • 0
    Зачем? Какая разница, как называть их переменными или константами?
  • 1
    В вопросе пользователь передал неправильные имена констант.
6

Посмотрите на свой код Вы определили DB_HOST и запросили DB_SERVER. DB_USER и DB_USERNAME Используйте этот код

define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_DATABASE", "databasename");

$connect = mysqli_connect(DB_SERVER , DB_USER, DB_PASSWORD, DB_DATABASE);
5

Убедитесь, что ваш пароль не имеет специальных символов и просто сохраняет простой пароль (например: 12345), он будет работать. Это самая странная вещь, которую я когда-либо видел. Я потратил около 2 часов, чтобы понять это.

Примечание: 12345, упомянутый ниже, является вашим простым паролем.

GRANT ALL PRIVILEGES ON dbname.* TO 'yourusername'@'%' IDENTIFIED BY '12345';
  • 1
    Хотя этот ответ является наиболее правильным, в частности, не используйте 12345, поскольку он является одним из 10 наиболее часто используемых паролей в мире, но сохраняйте ваш пароль буквенно-цифровым. При добавлении всего нескольких дополнительных символов что-то вроде 'smJ4bJ39kHab29PpfjKq' может по-прежнему обеспечивать равную или лучшую энтропию, как и те случайно сгенерированные пароли cPanel, но при этом исключая специальные символы.
  • 0
    не знаю, почему это произошло на одном сервере, аналогичный пароль работал на другом сервере, кстати, хороший улов !! это решило проблему.
3

вы defIne как DB_USER, но используете как DB_USERNAME. Также php сообщает имя пользователя @localhost cant access. Не root @localhost.

Измените параметр define или connect.

1

Те же проблемы столкнулись с XAMPP 7 и opencart Arabic 3. Замена localhost на фактическое имя машины решает проблему.

1

Это ваш код:

<?php

    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "databasename");

    $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

?>

Единственная ошибка, которая вызывает это сообщение, заключается в следующем:

  • вы определяете DB_USER, но вы вызываете его как DB_USERNAME.

В следующий раз будьте осторожны.

Лучше для программиста начального уровня, который хочет начать кодирование в PHP, чтобы не использовать то, что он или она не знает очень хорошо.

ТОЛЬКО как совет, пожалуйста, попробуйте использовать (в первый раз) код более вездесущим.

ex: не используйте оператор define(), попробуйте использовать объявление переменных как $db_user = 'root';

Имейте приятный опыт:)

0

Я исправил несколько вещей здесь, "DB_HOST", определенный здесь, должен быть также DB_HOST там, и "DB_USER" там также называется "DB_USER", всегда проверяйте код, чтобы они были одинаковыми.

<?php
    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "");

    $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
?>
0

В моем случае проблема была:

define ('DB_PASSWORD', "MyPassw0rd!'");

(нечетный сингл перед двойником)

0

У меня была эта ошибка, пытающаяся подключиться к другому пользователю, чем root, которую я установил бы для ограничения доступа.

В mysql я бы установил пользователя MofX с хостом %, и он не подключился.

Когда я изменил хост пользователя на 127.0.0.1, как в 'MofX'@'127.0.0.1', он сработал.

0

Ответ на этот вопрос выше, просто чтобы вы чувствовали себя комфортно, используя все четыре строки одновременно в соединении

<?php
  define("DB_HOST", "localhost");
  define("DB_USER", "root");
  define("DB_PASSWORD", "");
  define("DB_DATABASE", "databasename");

  $db = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
  // you could test connection eventually using a if and else conditional statement, 
  // feel free to take out the code below once you see Connected!
  if ($db) {
    echo "Connected!";
  } else {
    echo "Connection Failed";
  }
?>
0

Аналогичная проблема возникает со мной, с AWS RDS MySQL. Только сейчас ответил аналогичный вопрос здесь. Посмотрел различные источники, но по этой теме почти весь недостаток ответа. Хотя этот поток помог мне, подстройте его для обновления имен хостов на сервере. Войдите в свой SSH и выполните следующие действия:

cd /etc/
sudo nano hosts

Теперь, добавляя сюда ваши имена хостов: Например:

127.0.0.1 localhost
127.0.0.1 subdomain.domain.com [if cname redirected to endpoints]
127.0.0.1 xxxxxxxx.xxxx.xxxxx.rds.amazonaws.com [Endpoints]

и теперь, настраивая config/database.php следующим образом:

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'hostname' => '35.150.12.345',
    'username' => 'user-name-here',
    'password' => 'password-here',
    'database' => 'database-name-here',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

где 35.150.12.345 - ваш IPv4 общедоступный IP-адрес, расположенный в ec2-dashboard > Network Interfaces > Description : RDSNetworkInterface >> IPv4 Public IP ('35.150.12.345 ').

Примечание. Обратите внимание, что только IPV4 будет работать с параметром "имя хоста". hostname, cname, домены выведут ошибку подключения к базе данных.

0

В определении аргументов есть опечатка, измените DB_HOST на DB_SERVER и DB_USER на DB_USERNAME:

<?php

    define("DB_SERVER", "localhost");
    define("DB_USERNAME", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "databasename");
    $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

?>
0

Есть ли у вас два подключения одновременно? Если это так, закройте каждый раз, когда вам это не понадобится.

-1

Попробуйте изменить:

define("DB_SERVER", "localhost");

:

define("DB_SERVER", "127.0.0.1");
-1

попробуйте

define("DB_PASSWORD", null);

и это предупреждения попробуйте

$db = @mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

Но я рекомендую вам установить пароль root

-2
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

Put " DB_HOST " instead of " DB_SERVER " also 
put " DB_USER " Instead of " DB_USERNAME " 

чем он работает нормально!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню