#php #mysql
#php #mysql
Вопрос:
Эпизод о сокрытии паролей.
Я получаю сообщение об ошибке обновления localhost — «не удалось найти драйвер» после создания config.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 и получение информации оттуда происходит, когда я получаю ошибку.
<?php
return [
'database' => [
'name' => 'schema_test',
'username' => 'name',
'password' => 'password',
'connection' => 'localhost:3306',
'options' => [],
]
];
<?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’]…