Модуль 15. Работа с БД в PHP проекте Flashcards
Подключение через mysqli_connect
Сначала создается новый объект подключения к БД mysqli, в параметрах передаются те же параметры, что мы
использовали в консольной команде, хост, имя пользователя, пароль и название БД. Этот объект помещается в
переменную $connection. Затем у этого объекта мы выполняем метод query(), т.е. вызываем функцию класса
(функции класса называются методами). Этот метод делает запрос к БД, в качестве строки передаем ему запрос,
который необходимо выполнить.
$connection = new mysqli(‘localhost’, ‘php_user’, ‘pass’, ‘example_db’);
$dbResult = $connection->query(‘SELECT id
, name
FROM cars
LIMIT 3’);
$cars = [];
if ($dbResult) {
while ($car = $dbResult->fetch_assoc()) {
$cars[] = $car;
}
}
$connection->close();
foreach ($cars as $car) {
echo $car[‘id’] . ‘: ‘ . $car[‘name’] . PHP_EOL;
}
Подключение через PDO
Очень похож на вариант использования mysqli. Но есть несколько отличий: При создании
объекта в первом параметре передается строка подключения, в ней указывается тип подключения, хост и бд. При
выполнении fetch формат передается константой в параметре метода. И нет необходимости закрывать соединение,
оно будет закрыто автоматически при удалении объекта.
$connection = new PDO(‘mysql:host=localhost;dbname=example_db’, ‘php_user’,
‘pass’);
$dbResult = $connection->query(‘SELECT id
, name
FROM cars
LIMIT 3’);
$cars = [];
if ($dbResult) {
while ($car = $dbResult->fetch(PDO::FETCH_ASSOC)) {
3
$cars[] = $car;
}
}
foreach ($cars as $car) {
echo $car[‘id’] . ‘: ‘ . $car[‘name’] . PHP_EOL;
}
Подготовленные запросы
Экранирование данных указанных пользователем которые попадают в запрос для избежания возможности SQL иньекции
Для создания подготовленного запроса используется метод prepare, в нем с помощью конструкций, как в
примере :limit, можно создавать именованные параметры, а затем с помощью метод bindParam можно подставить
значение переменной, приведя его к необходимому типу.
Работа с БД на проекте 1
Импортируем дамп в проект
mysql -u -p -h dbname < dump.sql
Работа с БД на проекте 2
настраиваем файл конфигурации с данными для подключения (файл который возвращает данные пользователя для подключения)
// config/database.php
return [
‘hostname’ => ‘localhost’,
8
‘username’ => ‘php_user’,
‘password’ => ‘pass’,
‘database’ => ‘php_project_db’,
];
Работа с БД на проекте 3
Создаем скрипт для подключения к БД в котором создаем функцию для подключения к БД используя обьет PDO
function connectToDB()
{
$conf = loadConfig(database
)
$connection = new PDO(
“mysql:host={conf[‘hostname’]};dbname={$config[‘database]}”,
$conf[‘username’],
$conf[‘password’]
);
}
Работа с БД на проекте 4
Что бы каждый раз не создавать новове подключение к БД, в функции создания PDO можно использовать статическую переменную.
function connectToDB(): PDO
{
static $connection = null;
if (null !== $connection) {
return $connection;
}
При первом обращении к функции, статичная переменная будет создана и условие не выполнится, в нее будет
помещен объект подключения к БД. А при повторном обращении к функции, в переменной уже будет это
соединение и оно сразу же будет возвращено.
Хранение паролей в БД
Хранить пароль в БД не безопасно, нужно его хешировать.
Для хеширования пароля используется функция password_hash
password_hash(‘123456’, PASSWORD_DEFAULT)
Проверка хешированного пароля
Для проверки хешированного пароля из БД с указанным в поле используется функция password_verify
password_verify($password, $user[‘password’])