Проблема с эпизодом 15 laracasts.com Практикующий PHP

#php #mysql

#php #mysql

Вопрос:

Эпизод о сокрытии паролей.

Я получаю сообщение об ошибке обновления localhost — «не удалось найти драйвер» после создания config.php как показано на видео.

Connection.php

 <?php

class Connection
{
    public static function make($config)
    {
        try {
/*            return new PDO('mysql:host=localhost:3306;dbname=schema_test', 'name', 'password');*/
            return new PDO(
                $config['connection'].';dbname='.$config['name'],
                $config['username'],
                $config['password'],
                $config['options']
            );
        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }
}
  

Он работал с закомментированной версией, но после создания config.php и получение информации оттуда происходит, когда я получаю ошибку.

config.php

 <?php

return [
    'database' => [
        'name' => 'schema_test',
        'username' => 'name',
        'password' => 'password',
        'connection' => 'localhost:3306',
        'options' => [],
    ]
];
  

bootstrap.php

 <?php

require 'database/Connection.php';

require 'database/QueryBuilder.php';

$config = require 'config.php';

return new QueryBuilder(
    Connection::make($config['database'])
);
  

Также я не получаю никакой дополнительной информации об ошибке в консоли.

Я уже пробовал решения, которые работали для других, например: sudo apt-get install php-mysql

Я попытался переустановить несколько вещей, связанных с php, и это тоже ничего не изменило.

 <?php

require 'database/Connection.php';

require 'database/QueryBuilder.php';

$config = require 'config.php';

print_r($config);

return new QueryBuilder(
    Connection::make($config['database'])
);
  

Вывод:

Массив ( [база данных] => Массив ( [имя] => schema_test [имя пользователя] => пользователь [пароль] => пароль [подключение] => localhost: 3306 [параметры] => Array ( ) ) ) SQLSTATE[HY000] [1045] Доступ запрещен для пользователя ‘user’@’localhost’ (с использованием пароля: ДА)

Комментарии:

1. Не забывайте, что первым ключом вашего массива config является «database», поэтому используйте $config[‘база данных’][‘имя’] … Если нет, то каково сообщение от exception ?

2. Не заметил этого. Изменил его на $config[‘database’], теперь там написано «недопустимое имя источника данных», и в консоли я получаю: Уведомление PHP: Неопределенный индекс: база данных на Connection.php строка 10. Я не уверен, что я делаю не так.

Ответ №1:

Вы не объявляете драйвер, таким образом, вы получаете 'could not find driver' . Кроме того, вам не хватает имени host= параметра.

Чтобы исправить эту ошибку, измените свой экземпляр PDO следующим образом:

 return new PDO(
    'mysql:host='.$config['connection'].';dbname='.$config['name'],
    $config['username'],
    $config['password'],
    $config['options']
 );
  

Ваш $config массив и так в порядке, и он также включен правильно.

Комментарии:

1. Исправил это так, как вы показали здесь. Теперь я по какой-то причине получаю отказ в доступе SQLSTATE [HY000] [1045] для пользователя «@’localhost’ (используя пароль: НЕТ). Но я ввел пароль в config.php и вызовите его в Connection.php .

2. Редактировать: в консоли он выдает уведомление PHP: Попытка получить доступ к смещению массива по значению типа null в … в строке 10,10,10 bootstrap.php и в строке 10,10,11,12,13 в Connection.php

3. не могли бы вы добавить print_r($config); к своему bootstrap.php и добавить его в свой вопрос (с помощью кнопки редактирования), пожалуйста?

4. Добавлен print_r($config)

5. Не могли бы вы также опубликовать вывод print_r ?

Ответ №2:

В вашем config.php , установите непосредственно массив :

 <?php

$config = [
    'database' => [
        'name' => 'schema_test',
        'username' => 'name',
        'password' => 'password',
        'connection' => 'mysql:host=localhost:3306',
        'options' => [],
    ]
];
  

В вашем bootstrap.php пожалуйста, требуйте вашего config.php файл, подобный этому :

 require 'config.php';
  

И не забудьте использовать $config[‘database’][‘name’]…