1142 Ошибка дана, хотя разрешение существует, с использованием PDO / mysql

Я использую MySQL 8.0 и php 7.3.0

Я предоставил полные разрешения для 'user_insert_'@'127.0.0.1', и я могу нормально запустить следующий оператор SELECT из pymysql и MySQL Workbench, но не через PDO в php:

"SELECT * FROM worker_status"

Я получаю следующее сообщение об ошибке:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user 'user_insert_'@'localhost' for table 'worker_status' in C:\xampp\htdocs\hud\test_api_2\objects\activity.php:33

Я ожидал получить ответ в одну строку.

Я уже модифицировал пользователя MySql для использования собственных паролей, используя следующую строку:

ALTER USER user_insert_ IDENTIFIED WITH mysql_native_password BY 'password123';

Эта модификация является решением, указанным здесь: phpMyAdmin в MySQL 8.0 (Также решение, из которого этот поток отмечен как дубликат)

Вот соответствующий код:

class Database{

private $host = "127.0.0.1";
private $db_name = "hud";
private $username = "user_insert_";
private $password = "password123";
private $charset = 'utf8mb4';
private $dsn = "";
public $conn;

public function getConnection(){
  $this->conn = null;

    $this->dsn = "mysql:host=$this->host;dbname=$this->db_name;charset=$this->charset";
    print($this->dsn);
    $this->options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];

    try {
     $this->conn = new PDO($this->dsn, $this->username, $this->password, $this->options);
    } catch (\PDOException $e) {
         throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }


    return $this->conn;
}


    public function __construct($db){
    $this->conn = $db;
}

function read(){

    $query = "SELECT * FROM worker_status";
    $stmt = $this->conn->prepare($query);
    $stmt->execute();
    $result = $stmt->fetch();

    return $stmt;
}

Я проверил:

  • показать гранты для 'user_insert_'@'127.0.0.1'; - Это показывает, что этому пользователю предоставлены все разрешения.
  • При запуске соединения с базой данных никаких исключений не генерируется.
  • Правильная база данных и таблица подключаются.
  • Что мой синтаксис PDO соответствует документации.
  • Пользователь уже подключается с помощью mysql_native_password (Ссылка: phpMyAdmin в MySQL 8.0)

Мне это показалось довольно ванильным случаем. Почему я получаю ошибку разрешения 1142 SELECT исключительно с php PDO?

В сообщении об ошибке отображается 'user_insert_'@'localhost', а в вашем вопросе упоминается 'user_insert_'@'127.0.0.1'; попробуйте изменить строку подключения на хост 127.0.0.1

GMB 05.01.2019 00:06

@GMB Я использовал private $host = "127.0.0.1"; в качестве переменной в моей строке подключения (не localhost), но просто попытался перезаписать переменную в строке подключения следующим образом: $this->dsn = "mysql:host=127.0.0.1;dbname=$this->db_name;charset=$this->c‌​harset"; Любая версия дает мне исходную ошибку.

Daniel Scott 05.01.2019 00:20

Измените хост-часть пользователя с 127.0.0.1 на localhost.

Shadow 05.01.2019 00:21

@Shadow после модификации private $host = "localhost"; я получаю ошибку: <b>Fatal error</b>: Uncaught PDOException: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client in C:\xampp\htdocs\hud\test_api_2\config\database.php:26

Daniel Scott 05.01.2019 00:23

Если вы получили сообщение об ошибке, пожалуйста, выполните поиск по нему, потому что очень вероятно, что он уже имеет ответ. См. stackoverflow.com/questions/49948350/phpmyadmin-on-mysql-8-0

Shadow 05.01.2019 00:35

@Shadow Вы хорошо замечаете, и я ожидал, что вас подтолкнут к этому решению. Я уже реализовал найденное там решение и другие похожие темы, которые я попытался выделить в своем последнем пункте. Я постараюсь сделать это лучше, чтобы прояснить это для будущих вопросов.

Daniel Scott 05.01.2019 00:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
59
0

Другие вопросы по теме