Почему нельзя получить доступ к конкретной БД с помощью PDO, но можно использовать mysqli без имени БД?(использовать devserver / phpmyadmin)? - PullRequest
0 голосов
/ 16 февраля 2019

Я устанавливаю easyphp / devserver (v17.0) на машине с Windows 10 x64.Работа с таблицами и тестирование для хранения удаленных данных с простыми php-файлами (очень новое для баз данных).Я пытаюсь настроить доступ к моей БД для моего проекта (желательно с использованием PDO).

Настройка всей базы данных с помощью команд mysql:

CREATE database arduDB;
CREATE USER 'Atmega'@'localhost';
GRANT USAGE on *.* to 'Atmega'@'localhost';
GRANT ALL PRIVILEGES ON arduDB.* TO 'Atmega'@'localhost';
CREATE USER 'Atmega'@'%';
GRANT USAGE on *.* to 'Atmega'@'%';
GRANT ALL PRIVILEGES ON arduDB.* TO 'Atmega'@'%';
FLUSH PRIVILEGES;

Все в порядке здесь.

Но не могу получить доступ к моей БД (arduDB) с помощью PDO, но могу использовать MYSQLI без использования имени БД 'arduDB'.

Я удалил '' (Любых) пользователей из phpmyadmin, но все еще могу 'т доступ с помощью PDO.Искал и читал весь день об этой проблеме, но не могу найти причину, почему это произошло.Также я создаю другого пользователя с паролем, но не могу получить доступ с помощью PDO к БД.

Похоже, что phpmyadmin не может связать права доступа к БД,

edited Этот файл 'add.php', без использования имени 'arduDB', дает доступ через MYSQLI:

<?php
    $servername = "localhost";
    $username = "Atmega";

    // Create connection
    $conn = new mysqli($servername, $username);

    // Check connection
    if ($conn->connect_error) {
        die("Failed: " . $conn->connect_error);
    }
    echo "Connected!!!";
?>

показывает «Подключено» в веб-браузере.Но та же ошибка, если я пытаюсь использовать аргумент arduDB.

Но когда я использую PDO, указывая базу данных arduDB , я не могу получить доступ к своей БД.

<?php
    $servername = "localhost";
    $username = "Atmega";

try {
    $conn = new PDO("mysql:host=$servername;dbname=arduDB", $username);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected!!!";
    }
catch(PDOException $e)
    {
    echo "Failed: " . $e->getMessage();
    }
?>

SQLSTATE [HY000] [1044] Доступ запрещен для пользователя '' @ 'localhost' к базе данных 'ardudb' или SQLSTATE [HY000] [1044] Доступ запрещен для пользователя 'Atmega' @ 'localhost'to database' ardudb '

Пожалуйста, что мне нужно настроить или использовать в моем коде для предоставления доступа к определенной БД с использованием PDO в моем проекте?

1 Ответ

0 голосов
/ 16 февраля 2019

Finlay Я нашел ответ.Как André Verwijs говорит в своем посте, phpmyadmins использует «unix_socket» для хранения паролей пользователей в «mysql» db.По этой причине даже в случае создания или изменения пароля для любого пользователя в разделе «Учетные записи пользователей» phpmyadmin всегда отображается «НЕТ» в ПАРОЛЬ КОЛОННЫ.Чтобы решить эту проблему, Андре Verwijs предлагает сделать это в консоли mysql:

use mysql;

SELECT user, plugin FROM user;

UPDATE user SET plugin="mysql_native_password"; 

update user set authentication_string=password('USE-HERE-PASSWORD'), plugin='mysql_native_password' where user='Atmega';

FLUSH PRIVILEGES;

С этим phpmyadmin будет использовать плагин "mysql_native_password" для паролей в базе данных mysql.И теперь можно получить доступ к моей БД с правильным именем пользователя и паролем (или без пароля).

...