Невозможно подключиться к базе данных MySQL на удаленном сервере с помощью php mysqli

Я пытаюсь использовать mysqli для вставки некоторых данных в базу данных MySQL (давайте назовем схему myDatabase), но не могу успешно подключиться. Вот фрагмент кода для подключения:

...
$config = parse_ini_file('../includes/config.ini');
$username = $config['username'];
$password = $config['password'];
$dbname = $config['dbname'];
$server = $config['server'];
$conn = new mysqli($server, $username, $password, $dbname);
if (!$conn || $conn->connect_error)   {
die( 'Connection Failed: ('.$conn->connect_errno.') '.$conn->connect_error);
}
...

Я получаю следующий результат:

Connection Failed: (1045) Access denied for user 'myUser'@'my.laptop.ip.address' (using password: YES)

Вот некоторые подробности о настройке, если они актуальны:
Код на моем ноутбуке работает под управлением Windows 7 и использует PHP 5.3.5, поставляемый с xammpp.
База данных размещена на удаленном сервере с MySQL5.1.52. Я создал пользователя, которому я предоставил все привилегии в myDatabase. *. Для пользователя не указан хост (например, «myUser» @ «%»), так как я все еще нахожусь в разработке и не знаю IP-адреса, на котором будет размещен код для действующего приложения.

Если я ssh на сервер базы данных, я могу подключиться к MySQL, используя учетные данные для myUser и получить доступ к таблицам в myDatabase. У меня есть другая схема на этом же сервере, к которой обращается другой пользователь, и я смог использовать mysqli для подключения без каких-либо проблем.

Просто чтобы убедиться, что это не опечатка, я удалил пользователя и создал его снова, скопировав и вставив имя пользователя и пароль из файла config.ini, использованного в моем php-коде (и, разумеется, сброшенных привилегий). Я сделал это снова, за исключением того времени, когда был указан хост, например, СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ ‘myUser’@’my.laptop.ip.address’, ИДЕНТИФИЦИРОВАННОГО ‘myPassword’. Я продолжаю получать ту же ошибку, и теперь я полностью озадачен.

Помогите, пожалуйста.

0

Решение

На вашей машине MySQL ударил:

GRANT ALL PRIVILEGES ON database.* TO 'myUser'@'%' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;

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

0

Другие решения

Хорошо, это странно, но, похоже, проблема связана с паролем, который я использовал. Оригинал содержал несколько специальных символов ($, & +). Когда я изменил его так, чтобы он содержал только цифры, буквы и подчеркивание, это сработало.

Это реально, или я случайно сделал что-то еще, не осознавая, что это и есть фактическое решение?

0