За последние 24 часа нас посетили 21890 программистов и 987 роботов. Сейчас ищут 653 программиста ...

Не работает запрос к БД через PDO

Тема в разделе "PHP для новичков", создана пользователем Artmyas, 1 дек 2022.

  1. Artmyas

    Artmyas Новичок

    С нами с:
    29 авг 2022
    Сообщения:
    7
    Симпатии:
    1
    Здравствуйте. Не получается PDO подключение к базе данных mysql. Пароль и логин верные 100%. Пробовал убирать пароль и создавать нового пользователя, не помогло, как мне сказали, проблема с правами пользователя. Надеюсь поможете решить проблему.

    Текст ошибки:

    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) in C:\OpenServer\domains\test\index.php:21 Stack trace: #0 C:\OpenServer\domains\test\index.php(21): PDO->__construct() #1 C:\OpenServer\domains\test\index.php(9): Database->connect() #2 C:\OpenServer\domains\test\index.php(49): Database->__construct() #3 {main} thrown in C:\OpenServer\domains\test\index.php on line 21

    код файла index.php

    Код (Text):
    1. <?php
    2.  
    3. Class Database{
    4.  
    5.     private $link;
    6.  
    7.     public function __construct()
    8.     {
    9.         $this->connect();
    10.     }
    11.  
    12.     private function connect(){
    13.  
    14.         $config = require_once 'config.php';
    15.  
    16.         $dsn = 'mysql:host='.$config['host'].';dbname='.$config['db_name'].';charset='.$config['charset'];
    17.  
    18.  
    19.  
    20.  
    21.         $this->link = new PDO($dsn, $config['username'], $config['password']);
    22.  
    23.         return $this;
    24.     }
    25.  
    26.     public function execute($sql){
    27.         $sth = $this->link->prepare($sql);
    28.         $sth->execute();
    29.         return $sth;
    30.     }
    31.  
    32.     public function query($sql){
    33.  
    34.         $exe = $this->execute($sql);
    35.  
    36.         $result = $exe->fetchAll(PDO::FETCH_ASSOC);
    37.  
    38.         if ($result === false){
    39.             return [];
    40.         }
    41.  
    42.         return $result;
    43.  
    44.     }
    45.  
    46.  
    47. }
    48.  
    49. $db = new Database();
    Код файла config.php

    Код (Text):
    1. <?php
    2.  
    3.  
    4. return[
    5.     'host' => 'localhost',
    6.     'db_name' => 'test_pdo',
    7.     'username' => 'root',
    8.     'password' => '',
    9.     'charset' => 'utf8'
    10. ];
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    В консоли "mysql -u root test_pdo" что пишет?
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Пользователю нужно обязательно задать пароль, ну и соответственно указать его в конфиге
     
  4. Artmyas

    Artmyas Новичок

    С нами с:
    29 авг 2022
    Сообщения:
    7
    Симпатии:
    1
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 1
    Server version: 5.6.51-log MySQL Community Server (GPL)

    Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    --- Добавлено ---
    Добавил пароль в phpmyadmin
    Ошибка в браузере:


    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) in C:\OpenServer\domains\test\index.php:21 Stack trace: #0 C:\OpenServer\domains\test\index.php(21): PDO->__construct() #1 C:\OpenServer\domains\test\index.php(9): Database->connect() #2 C:\OpenServer\domains\test\index.php(49): Database->__construct() #3 {main} thrown in C:\OpenServer\domains\test\index.php on line 21
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    при чем тут phpmyAdmin? пароль пользователю надо добавить .. ну допустим что вы через phpmyadmin добавили....
    а в конфиге то его тоже прописали?
     
  6. Artmyas

    Artmyas Новичок

    С нами с:
    29 авг 2022
    Сообщения:
    7
    Симпатии:
    1
    Да, прописал в конфиге
     
  7. Artmyas

    Artmyas Новичок

    С нами с:
    29 авг 2022
    Сообщения:
    7
    Симпатии:
    1
    Вы имели в виду добавить пароль через консоль?
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    username root
    password root
     
  9. Artmyas

    Artmyas Новичок

    С нами с:
    29 авг 2022
    Сообщения:
    7
    Симпатии:
    1
    Решение оказалось простым, нужно было вместо localhost указать 127.0.0.1:3000, чтобы бд подключалась из опенсервера.
     
    artoodetoo нравится это.