Модуль 15. Работа с БД в PHP проекте Flashcards

1
Q

Подключение через mysqli_connect

A

Сначала создается новый объект подключения к БД 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;
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Подключение через PDO

A

Очень похож на вариант использования 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;
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Подготовленные запросы

A

Экранирование данных указанных пользователем которые попадают в запрос для избежания возможности SQL иньекции
Для создания подготовленного запроса используется метод prepare, в нем с помощью конструкций, как в
примере :limit, можно создавать именованные параметры, а затем с помощью метод bindParam можно подставить
значение переменной, приведя его к необходимому типу.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Работа с БД на проекте 1

A

Импортируем дамп в проект
mysql -u -p -h dbname < dump.sql

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Работа с БД на проекте 2

A

настраиваем файл конфигурации с данными для подключения (файл который возвращает данные пользователя для подключения)
// config/database.php
return [
‘hostname’ => ‘localhost’,
8
‘username’ => ‘php_user’,
‘password’ => ‘pass’,
‘database’ => ‘php_project_db’,
];

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Работа с БД на проекте 3

A

Создаем скрипт для подключения к БД в котором создаем функцию для подключения к БД используя обьет PDO
function connectToDB()
{
$conf = loadConfig(database)

$connection = new PDO(
“mysql:host={conf[‘hostname’]};dbname={$config[‘database]}”,
$conf[‘username’],
$conf[‘password’]
);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Работа с БД на проекте 4

A

Что бы каждый раз не создавать новове подключение к БД, в функции создания PDO можно использовать статическую переменную.
function connectToDB(): PDO
{
static $connection = null;
if (null !== $connection) {
return $connection;
}
При первом обращении к функции, статичная переменная будет создана и условие не выполнится, в нее будет
помещен объект подключения к БД. А при повторном обращении к функции, в переменной уже будет это
соединение и оно сразу же будет возвращено.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Хранение паролей в БД

A

Хранить пароль в БД не безопасно, нужно его хешировать.
Для хеширования пароля используется функция password_hash
password_hash(‘123456’, PASSWORD_DEFAULT)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Проверка хешированного пароля

A

Для проверки хешированного пароля из БД с указанным в поле используется функция password_verify
password_verify($password, $user[‘password’])

How well did you know this?
1
Not at all
2
3
4
5
Perfectly