Я написав деяку функцію, яка використовується на 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 ви можете встановити різні дозволи для облікових записів користувачів за хостами. Може існувати декілька різних облікових записів з однаковим ім'ям у поєднанні з хостом, з якого вони підключаються. Найпоширенішими з них є [email protected] та root@localhost. Вони можуть мати різні паролі та дозволи. Переконайтеся, що обліковий запис root@localhost існує і має потрібні налаштування.
Я готовий посперечатися, виходячи з Ваших пояснень, що проблема саме в цьому. Підключення з іншого ПК використовує інший обліковий запис, ніж root@localhost, а командний рядок, я думаю, підключається за допомогою [email protected].
З того, що ви сказали, це схоже на проблему, коли драйвер 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