Не вдалося підключитися: Відмовлено в доступі для користувача 'root'@'localhost' (використовуючи пароль: YES)" з функції php

Я написав деяку функцію, яка використовується на php-сторінці, для взаємодії з базою даних mysql. Коли я тестую їх на своєму сервері, то отримую таку помилку:

"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)" 

Я можу використовувати їх на своєму ПК (використовуючи XAMPP) і можу переміщатися по таблицях бази даних за допомогою командного рядка на сервері. Однак веб-сторінка не вдається підключитися. Я перевірив пароль, але безрезультатно. Він правильний (інакше я не зміг би увійти в mysql з командного рядка).

Виклик функції наступний:

$conn = new mysqli("localhost", "root", "password", "shop");

Чи потрібно щось налаштовувати в моєму сервері? Дякую

Редагувати: PHP версія 5.3.3-7+squeeze1 версія mysql: 5.1.49-3 обидва на debian

Чи є в БД запис облікового запису користувача root@localhost? У MySQL ви можете встановити різні дозволи для облікових записів користувачів за хостами. Може існувати декілька різних облікових записів з однаковим ім'ям у поєднанні з хостом, з якого вони підключаються. Найпоширенішими з них є root@127.0.0.1 та root@localhost. Вони можуть мати різні паролі та дозволи. Переконайтеся, що обліковий запис root@localhost існує і має потрібні налаштування.

Я готовий посперечатися, виходячи з Ваших пояснень, що проблема саме в цьому. Підключення з іншого ПК використовує інший обліковий запис, ніж root@localhost, а командний рядок, я думаю, підключається за допомогою root@127.0.0.1.

Коментарі (3)

З того, що ви сказали, це схоже на проблему, коли драйвер MySQL в PHP5.3 має проблеми з підключенням до старої версії MySQL 4.1. Подивіться на http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authentication.aspx

Тут є схоже питання з корисними відповідями, https://stackoverflow.com/questions/1575807/cannot-connect-to-mysql-4-1-using-old-authentication

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user

Це поверне 16 для облікових записів зі старими паролями і 41 для облікових записів з новими паролями (і 0 для облікових записів без пароля взагалі, можливо, ви захочете подбати про них також). Або скористайтеся інструментами керування користувачами інтерфейсу MySQL (якщо такі є), або

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
Коментарі (4)

Спробуйте ініціалізувати свої змінні і використовувати їх в об'єкті підключення:

$username ="root";
$password = "password";
$host = "localhost";
$table = "shop";
$conn = new mysqli("$host", "$username", "$password", "$table");
Коментарі (2)