1142 Ошибка при использовании PDO, несмотря на использование mysql_native_password - PullRequest
0 голосов
/ 05 января 2019

Этот вопрос был помечен ранее как дубликат, хотя я уже внедрил наиболее популярные решения. Я изменил пользователя MySql, чтобы использовать собственные пароли, используя следующую строку (которая не устранила мою проблему с подключением):

ALTER USER user_insert_ IDENTIFIED WITH mysql_native_password BY 'password123';

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

1142 Команда SELECT запрещена для пользователя

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

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

"SELECT * FROM worker_status"

Я получаю ошибку:

Неустранимая ошибка: Uncaught PDOException: SQLSTATE [42000]: Синтаксическая ошибка или нарушение прав доступа: 1142 Команда SELECT запрещена для пользователя 'user_insert _' @ 'localhost' для таблицы 'worker_status' в C: \ xampp \ htdocs \ hud \ test_api_2 \ объекты \ activity.php: 33

Я ожидал получить однорядный ответ.

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

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;
}

Кроме того, при попытке доступа к phpmyadmin в "", я получаю сообщение об ошибке red , в котором говорится, что caching_sha2_password не включен для доступа броузера.

Я проверил:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...