"Не удалось подключиться: доступ запрещен для пользователя" 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
Ответы
Ответ 1
Я решил так:
Я вошел в систему с именем пользователя root
mysql -u root -p -h localhost
Я создал нового пользователя с
CREATE USER 'francesco'@'localhost' IDENTIFIED BY 'some_pass';
то я создал базу данных
CREATE DATABASE shop;
Я предоставил привилегии для нового пользователя для этой базы данных
GRANT ALL PRIVILEGES ON shop.* TO 'francesco'@'localhost';
Затем я вышел из корневого каталога и вошел в новый пользователь
quit;
mysql -u francesco -p -h localhost
Я перестроил свою базу данных с помощью script
source shop.sql;
И что это.. Теперь из php работает без проблем с вызовом
$conn = new mysqli("localhost", "francesco", "some_pass", "shop");
Спасибо всем за ваше время:)
Ответ 2
Есть ли запись учетной записи пользователя в базе данных для root @localhost? В MySQL вы можете установить разные разрешения учетной записи пользователя хостом. Могут быть несколько разных учетных записей с тем же именем в сочетании с хостом, с которым они подключаются. Наиболее распространенными являются root @127.0.0.1 и root @localhost. Они могут иметь разные пароли и разрешения. Убедитесь, что root @localhost существует и имеет настройки, которые вы ожидаете.
Я готов поспорить на основании ваших объяснений, что это проблема. Подключение с другого ПК использует другую учетную запись, чем root @localhost, и в командной строке, которая, я думаю, подключается с помощью [email protected]
Ответ 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
Здесь есть аналогичный вопрос с некоторыми полезными ответами, Невозможно подключиться к MySQL 4.1+ с помощью старой проверки подлинности
SELECT `User`, `Host`, Length(`Password`) FROM mysql.user
Это приведет к возврату 16 для учетных записей со старыми паролями и 41 для учетных записей с новыми паролями (и 0 для учетных записей без пароля вообще, возможно, вы захотите позаботиться об этих же). Либо используйте инструменты управления пользователями в интерфейсе MySQL (если они есть), либо
SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
Ответ 4
Здесь может быть?
Я считаю, что код должен быть:
$connect = new mysqli("host", "root", "", "dbname");
потому что root не имеет пароля. (using password: YES)
говорит "вы используете пароль с этим пользователем"
Ответ 5
У меня тоже была эта проблема. Но это было по другой причине.
Мой пароль начинался с символа $
... например. $MyPassword
Я изменил его на #MyPassword
, и проблема решена.
Ответ 6
Измените свои привилегии на PHPmyAdmin (WAMP), обратите внимание, что ваш пароль и имя пользователя не были созданы. Так что создайте или отредактируйте его, чтобы он мог работать с вашим SQL-соединением в вашем php.
Надеюсь, он работает.
Ответ 7
Совет:
закомментируйте файл pid и socket, если вы не можете подключиться к серверу.
mysql может подключаться к некорректному файлу pid и/или socket,
поэтому, когда вы пытаетесь подключиться к серверной командной строке, он "смотрит"
в неправильном файле pid/socket...
### comment out pid and socket file, if you can't connect to server..
#pid-file=/var/run/mysql/mysqld.pid
#socket=/var/lib/mysql/mysql.sock
Ответ 8
Скорее всего, он не правильно идентифицирует вашего пользователя. корень @локальный.
Выберите версию Mysql, которую использует ваш MAMP.
/Applications/MAMP/Library/bin/mysqldump -uroot -p db_name > test_db_dump.sql
Я на самом деле написал псевдоним на своем компьютере, поэтому мне не нужно помнить, как добраться до каталога bin.
alias mysqldumpMAMP='/Applications/MAMP/Library/bin/mysqldump'
Что позволяет мне запускать это:
mysqldumpMAMP -uroot -p db_name > test_db_dump.sql
Вы можете сохранить псевдоним в своем профиле bash ~/.bash_profile
или ~/.bash_rc
Ответ 9
Легко.
откройте панель управления xampp → Config → my.ini edit с помощью блокнота. Теперь добавьте это ниже [mysqld]
skip-grant-tables
Сохранить. Запустите Apache и MySQL.
Я надеюсь помочь вам
Ответ 10
Может быть, там пароль не установлен, и вы передаете пароль в качестве аргумента. Попробуйте пропустить аргумент пароля при подключении.
Ответ 11
Попробуйте инициализировать переменные и использовать их в объекте подключения:
$username ="root";
$password = "password";
$host = "localhost";
$table = "shop";
$conn = new mysqli("$host", "$username", "$password", "$table");
Ответ 12
Это не ошибка, это ваша ошибка, что вы пишете неправильный код в файле подключения.
вы просто пишете как
$con = mysql_connect($host,$user,$password);
если ваш код записи worng, например
$con = mysql_connect($host,$password,$user);
то он показывает
Access denied for user ''@'localhost' (using password: YES)
так что продолжайте наслаждаться....