стара презентацияЕзик за работа с данни.
Той позволява:

SELECT * FROM MAJORS SELECT NAME, ACADEMIC_DEGREE FROM MAJORS SELECT * FROM MAJORS WHERE NAME = 'Software Engineering' SELECT * FROM MAJORS WHERE START_YEAR = 2011

INSERT INTO MAJORS (NAME, ACADEMIC_DEGREE) VALUES ('Software Eginnering', 'bachelor')People Animals ======================== ========================= | id | name | pet_id | | id | name | species | | 1 | Pesho | 2 | | 1 | Sisi | cat | | 2 | Gosho | NULL | | 2 | Sharo | dog | | 3 | Ivan | 4 | | 3 | Mecho | dog | | 4 | Penka | 1 | | 4 | Koko | parrot | ======================== =========================
Ако искаме да намерим всички хора с домашни любимци, както и самите им любимци:
SELECT People.name, Animals.name FROM People INNER JOIN Animals ON People.pet_id = Animals.id;
=>
| People.name | Animals.name | | Pesho | Sharo | | Ivan | Koko | | Penka | Sisi |
Има няколко вида `JOIN`. Основните са `INNER`, `LEFT`, `RIGHT`, `FULL`.
За този курс сигурно ще използвате само `INNER JOIN` ако въобще ви се наложи.
INNER JOIN¿ FULL JOIN¿
============================== ==============================
| People.name | Animals.name | | People.name | Animals.name |
| Pesho | Sharo | | Pesho | Sharo |
| Ivan | Koko | | Gosho | NULL |
| Penka | Sisi | | Ivan | Koko |
============================== | Penka | Sisi |
хора и любимците им | NULL | Mecho |
==============================
всички хора и животни
LEFT JOIN¿ RIGHT JOIN¿
============================== ==============================
| People.name | Animals.name | | People.name | Animals.name |
| Pesho | Sharo | | Pesho | Sharo |
| Gosho | NULL | | Ivan | Koko |
| Ivan | Koko | | Penka | Sisi |
| Penka | Sisi | | NULL | Mecho |
============================== ==============================
всички хора всички животниЗа създаване на базата phpMyAdmin е прост UI, който може да ви е полезен.
Има го и в xampp, в 000webhost и най-вероятно на всеки друг хостинг.
Следват 10тина слайда за него - ако искате ги пропуснете.










Макар и да има 3 начина за свързване към `SQL` от `PHP` - `mysql`(deprecated), `PDO`, `mysqli`, много силно ви препоръчваме да използвате `PDO`
$conn = new PDO('mysql:host=localhost;dbname=mydbname', 'user', 'password');
$sql = "SELECT * FROM MAJORS";
//$sql = "SELECT * FROM MAJORS WHERE START_YEAR = $year"
// Now lets say $year = "''; DROP DATABASE MAJORS;"
$query = $conn->query($sql) or die("failed!");
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
echo $row['NAME'];
}$conn = new PDO($dsn, $user, $pass, $options); // ¿
$stmt = $conn->query($sql); // direct $stmt = $conn->prepare($sql)->execute($values); // prepared
$row = $stmt->fetch(); // single row while ($row = $stmt->fetch()) // iterate rows $rows = $stmt->fetchAll(); // direct array
$conn = new PDO('mysql:host=localhost;dbname=university;charset=utf8', 'root', '');
$stmt = $conn->prepare("SELECT * FROM MAJORS WHERE ACADEMIC_DEGREE = '?'");
$stmt->execute(['бакалавър']) // Array of all ? values
$rows = $stmt->fetchALL(PDO::FETCH_NUM)
// type is PDO::FETCH_(NUM|ASSOC|BOTH|OBJ|LAZY)
// NUM ($r[0]), ASSOC ($r['key']), BOTH (default)
// OBJ ($r->key), LAZY (BOTH + OBJ) and others
$stmt = $conn->prepare("INSERT INTO MAJORS (NAME, ACADEMIC_DEGREE) VALUES ('?', '?')");
$stmt->execute(['Биология', 'бакалавър']);Както видяхте при резултатите имаме и обикновени и асоциативни масиви за резултати
По същия начин можем да задаваме и параметрите като асоциативен масив
$stmt = $conn->prepare("SELECT * FROM MAJORS
WHERE ACADEMIC_DEGREE = :degree");
$stmt->execute(['degree' => 'бакалавър']);
$stmt = $conn->prepare("
INSERT INTO MAJORS (NAME, ACADEMIC_DEGREE)
VALUES (:name, :degree)
");
$stmt->execute(['name' => 'Софтуерно Инженерство', 'degree' => 'бакалавър']);
$stmt->execute(['name' => 'Софтуерни Технологии', 'degree' => 'магистър']);db.php файл, който да комуникира с базата, а на останалите места използвайте него - утре може да решите, че предпочитате mongo.
camelCase|snake_case), (spaces|tabs), (same|new line {) - choose one and stick with it.Транзакции, bind-ване на параметри - няма да ви трябват
$conn->beginTransaction();
...
$dbh->commit(); // or $conn->rollBack();
$stmt->bindParam(':name', $name); // bind to variable
$stmt->bindValue(':degree', $degree); // bind to value
$stmt->execute();Имате база от данни със следната таблица и данни:
CREATE TABLE electives (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(128),
description VARCHAR(1024),
lecturer VARCHAR(128)
);
INSERT INTO electives (title, description, lecturer)
VALUES
("Programming with Go", "Let's learn Go", "Nikolay Batchiyski"),
("AKDU", "Let's Graduate", "Svetlin Ivanov"),
("Web technologies", "Let's learn the web", "Milen Petrov");Имплементирайте php страница с форма и валидация за добавяне на избираема дисциплина.
Добавете колона created_at на таблицата electives, коята да сочи момента на добавяне на реда.
Добавете функционалност за редактиране на избираема дисциплина.
HTTP GET на /electives.php/1 трябва да върне формата с попълнени текущи стойности.
HTTP POST на /electives.php/1 със съответните параметри трябва да промени избираемата с id 1.
Забележка - последното би трябвало да е PUT, а не POST, но с чист HTML без JS това не е възможно. Когато вземем JS ще видите правилния начин.