🗊Презентация Взаимодействие с СУБД. Лекция 5

Нажмите для полного просмотра!
Взаимодействие с СУБД. Лекция 5, слайд №1Взаимодействие с СУБД. Лекция 5, слайд №2Взаимодействие с СУБД. Лекция 5, слайд №3Взаимодействие с СУБД. Лекция 5, слайд №4Взаимодействие с СУБД. Лекция 5, слайд №5Взаимодействие с СУБД. Лекция 5, слайд №6Взаимодействие с СУБД. Лекция 5, слайд №7Взаимодействие с СУБД. Лекция 5, слайд №8Взаимодействие с СУБД. Лекция 5, слайд №9Взаимодействие с СУБД. Лекция 5, слайд №10Взаимодействие с СУБД. Лекция 5, слайд №11Взаимодействие с СУБД. Лекция 5, слайд №12Взаимодействие с СУБД. Лекция 5, слайд №13Взаимодействие с СУБД. Лекция 5, слайд №14Взаимодействие с СУБД. Лекция 5, слайд №15Взаимодействие с СУБД. Лекция 5, слайд №16Взаимодействие с СУБД. Лекция 5, слайд №17Взаимодействие с СУБД. Лекция 5, слайд №18Взаимодействие с СУБД. Лекция 5, слайд №19Взаимодействие с СУБД. Лекция 5, слайд №20Взаимодействие с СУБД. Лекция 5, слайд №21Взаимодействие с СУБД. Лекция 5, слайд №22Взаимодействие с СУБД. Лекция 5, слайд №23Взаимодействие с СУБД. Лекция 5, слайд №24Взаимодействие с СУБД. Лекция 5, слайд №25Взаимодействие с СУБД. Лекция 5, слайд №26Взаимодействие с СУБД. Лекция 5, слайд №27Взаимодействие с СУБД. Лекция 5, слайд №28Взаимодействие с СУБД. Лекция 5, слайд №29Взаимодействие с СУБД. Лекция 5, слайд №30

Содержание

Вы можете ознакомиться и скачать презентацию на тему Взаимодействие с СУБД. Лекция 5. Доклад-сообщение содержит 30 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Взаимодействие с СУБД
Лекция 5
Описание слайда:
Взаимодействие с СУБД Лекция 5

Слайд 2





Интерфейсы доступа к базам данных
Программный интерфейс (API) доступа к базам данных  – промежуточное звено для связи СУБД и языка программирования. 
В языке PHP существуют как универсальные, так и специализированные интерфейсы доступа к БД.
Описание слайда:
Интерфейсы доступа к базам данных Программный интерфейс (API) доступа к базам данных – промежуточное звено для связи СУБД и языка программирования. В языке PHP существуют как универсальные, так и специализированные интерфейсы доступа к БД.

Слайд 3





Базы данных и PHP
Поддерживаемые интерфейсы СУБД:
Описание слайда:
Базы данных и PHP Поддерживаемые интерфейсы СУБД:

Слайд 4





Доминирующая роль MySQL
Описание слайда:
Доминирующая роль MySQL

Слайд 5





Способы доступа к MySQL в PHP
Для доступа к СУБД MySQL из PHP существует три стандартных решения:
Стандартная библиотека MySQL (устарела)
Объектно-ориентированная библиотека MySQLi (громоздка)
Универсальное расширение PHP Data Objects (PDO) (в самый раз!).
Описание слайда:
Способы доступа к MySQL в PHP Для доступа к СУБД MySQL из PHP существует три стандартных решения: Стандартная библиотека MySQL (устарела) Объектно-ориентированная библиотека MySQLi (громоздка) Универсальное расширение PHP Data Objects (PDO) (в самый раз!).

Слайд 6





Интерфейс PHP Data Objects
PHP Data Objects (PDO) — расширение для PHP, предоставляющее разработчику универсальный интерфейс для доступа к множеству баз данных, в т.ч. PostgreSQL, MySQL, Oracle (OCI8), SQLite.
Чтобы узнать, для каких СУБД установлены драйверы в PDO, необходимо выполнить: print_r(PDO::getAvailableDrivers());
Описание слайда:
Интерфейс PHP Data Objects PHP Data Objects (PDO) — расширение для PHP, предоставляющее разработчику универсальный интерфейс для доступа к множеству баз данных, в т.ч. PostgreSQL, MySQL, Oracle (OCI8), SQLite. Чтобы узнать, для каких СУБД установлены драйверы в PDO, необходимо выполнить: print_r(PDO::getAvailableDrivers());

Слайд 7





Имя источника данных (DSN)
Имя источника данных (Data Source Name, DSN) – структура данных (строка), используемая для описания соединения к источнику данных. Используется во многих библиотеках, включая PDO и ODBC. 
DSN включает:
Имя источника данных
Месторасположение источника данных
Имя драйвера для доступа к источнику данных
Идентификатор пользователя для доступа к данным (если требуется)
Пароль для доступа к данным (если требуется)
Описание слайда:
Имя источника данных (DSN) Имя источника данных (Data Source Name, DSN) – структура данных (строка), используемая для описания соединения к источнику данных. Используется во многих библиотеках, включая PDO и ODBC. DSN включает: Имя источника данных Месторасположение источника данных Имя драйвера для доступа к источнику данных Идентификатор пользователя для доступа к данным (если требуется) Пароль для доступа к данным (если требуется)

Слайд 8





Соединение с базой данных через PHP Data Objects
$host    = "localhost"; // сервер баз данных
$db_name = "smiig";     // имя базы данных
$charset = "utf-8";     // кодировка базы данных
$user    = "pavel";     // имя пользователя
$pass    = “123456";    // пароль
$dsn = "mysql:host=$host;dbname=$db_name;charset=$charset"; 
// Дополнительные опции
$opt = array(
	PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 	
	PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); 
// указатель на соединение
$dbh = new PDO($dsn, $user, $pass, $opt);
Описание слайда:
Соединение с базой данных через PHP Data Objects $host = "localhost"; // сервер баз данных $db_name = "smiig"; // имя базы данных $charset = "utf-8"; // кодировка базы данных $user = "pavel"; // имя пользователя $pass = “123456"; // пароль $dsn = "mysql:host=$host;dbname=$db_name;charset=$charset"; // Дополнительные опции $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); // указатель на соединение $dbh = new PDO($dsn, $user, $pass, $opt);

Слайд 9





Соединение с базой данных через PHP Data Objects
try {
	# MS SQL Server и Sybase через PDO_DBLIB
	$dbh = new PDO("mssql:host=$host;dbname=$db_name", $user, $pass);
	$dbh = new PDO("sybase:host=$host;dbname=$db_name", $user, $pass);
	# MySQL через PDO_MYSQL
	$dbh = new PDO("mysql:host=$host;dbname=$db_name", $user, $pass);
	# SQLite
	$dbh = new PDO("sqlite:my/database/path/database.db"); 
}
catch(PDOException $e)
{
	echo $e->getMessage();
}
Описание слайда:
Соединение с базой данных через PHP Data Objects try { # MS SQL Server и Sybase через PDO_DBLIB $dbh = new PDO("mssql:host=$host;dbname=$db_name", $user, $pass); $dbh = new PDO("sybase:host=$host;dbname=$db_name", $user, $pass); # MySQL через PDO_MYSQL $dbh = new PDO("mysql:host=$host;dbname=$db_name", $user, $pass); # SQLite $dbh = new PDO("sqlite:my/database/path/database.db"); } catch(PDOException $e) { echo $e->getMessage(); }

Слайд 10





Обработка исключений
try
{
	$dbh = new PDO($dsn, $user, $password); 
}
catch (PDOException $e) 
{
	die('Подключение не удалось: ' . $e->getMessage()); 
}
Описание слайда:
Обработка исключений try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { die('Подключение не удалось: ' . $e->getMessage()); }

Слайд 11





Этапы выполнения запроса
Каждый запрос должен быть выполнен  в 3 (или 4 этапа)
prepare() – подготовка SQL-запроса
bindValue() / bindParam() – привязка данных к запросу (необязательно)
execute() – выполнение запроса (и привязка данных)
fetch() и аналоги – получение данных.
Описание слайда:
Этапы выполнения запроса Каждый запрос должен быть выполнен в 3 (или 4 этапа) prepare() – подготовка SQL-запроса bindValue() / bindParam() – привязка данных к запросу (необязательно) execute() – выполнение запроса (и привязка данных) fetch() и аналоги – получение данных.

Слайд 12





Вставка, обновление и удаление записей
$query_insert = $dbh->prepare("INSERT INTO folks ( first_name ) values ( 'Пушкин' )"); 
$query_update = $dbh->prepare("UPDATE folks SET name = 'Пушкин' "); 
$query_delete = $dbh->prepare("DELETE FROM folks WHERE name = 'Пушкин' "); 
$query_insert->execute();
$query_update->execute();
$query_delete->execute();
Описание слайда:
Вставка, обновление и удаление записей $query_insert = $dbh->prepare("INSERT INTO folks ( first_name ) values ( 'Пушкин' )"); $query_update = $dbh->prepare("UPDATE folks SET name = 'Пушкин' "); $query_delete = $dbh->prepare("DELETE FROM folks WHERE name = 'Пушкин' "); $query_insert->execute(); $query_update->execute(); $query_delete->execute();

Слайд 13





Подготовленные выражения
Подготовленные выражения (Prepared statements) – заранее скомпилированное выражение, которое может быть многократно выполнено путем отправки серверу лишь различных наборов данных. 
Каждое скалярное значение, подставляемое в запрос динамически, должно быть представлено именованным (:name) или обычным placeholder’ом.
Описание слайда:
Подготовленные выражения Подготовленные выражения (Prepared statements) – заранее скомпилированное выражение, которое может быть многократно выполнено путем отправки серверу лишь различных наборов данных. Каждое скалярное значение, подставляемое в запрос динамически, должно быть представлено именованным (:name) или обычным placeholder’ом.

Слайд 14





Примеры подготовленных выражений
# без placeholders - дверь SQL-инъекциям открыта!
$query = $dbh->prepare("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)"); 
# безымянные placeholders
$query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");
# именные placeholders
$query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");
Описание слайда:
Примеры подготовленных выражений # без placeholders - дверь SQL-инъекциям открыта! $query = $dbh->prepare("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)"); # безымянные placeholders $query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)"); # именные placeholders $query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");

Слайд 15





Безымянные placeholder’ы
# безымянные placeholders
$query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");

# назначаем переменные каждому placeholder, с индексами от 1 до 3 
$query->bindParam(1, $name); 
$query->bindParam(2, $addr); 
$query->bindParam(3, $city); 
# вставляем одну строку 
$name = "Александр Пушкин"; 
$addr = "набережная реки Мойки, д. 12"; 
$city = "Санкт-Петербург"; 
$query->execute();
# вставляем еще одну строку, уже с другими данными 
$name = "Михаил Лермонтов"; 
$addr = "набережная реки Фонтанки, д. 14"; 
$city = "Санкт-Петербург"; 
$query->execute();
Описание слайда:
Безымянные placeholder’ы # безымянные placeholders $query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)"); # назначаем переменные каждому placeholder, с индексами от 1 до 3 $query->bindParam(1, $name); $query->bindParam(2, $addr); $query->bindParam(3, $city); # вставляем одну строку $name = "Александр Пушкин"; $addr = "набережная реки Мойки, д. 12"; $city = "Санкт-Петербург"; $query->execute(); # вставляем еще одну строку, уже с другими данными $name = "Михаил Лермонтов"; $addr = "набережная реки Фонтанки, д. 14"; $city = "Санкт-Петербург"; $query->execute();

Слайд 16





Безымянные placeholder’ы
Если в запросе слишком много параметров, можно задать их в виде одного массива вместо нескольких переменных.
# набор данных, которые мы будем вставлять 
$data = array('Александр Пушкин',
	'набережная реки Мойки, д. 12',
	'Санкт-Петербург');
$query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");
$query->execute($data);
Описание слайда:
Безымянные placeholder’ы Если в запросе слишком много параметров, можно задать их в виде одного массива вместо нескольких переменных. # набор данных, которые мы будем вставлять $data = array('Александр Пушкин', 'набережная реки Мойки, д. 12', 'Санкт-Петербург'); $query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)"); $query->execute($data);

Слайд 17





Именные placeholder’ы
# первым аргументом является имя placeholder’а
# его принято начинать с двоеточия
# хотя работает и без них 
$query->bindParam(':name', $name);
$query->bindParam(':addr', $addr);
$query->bindParam(':city', $city);
Описание слайда:
Именные placeholder’ы # первым аргументом является имя placeholder’а # его принято начинать с двоеточия # хотя работает и без них $query->bindParam(':name', $name); $query->bindParam(':addr', $addr); $query->bindParam(':city', $city);

Слайд 18





Именные placeholder’ы
# здесь тоже можно передавать массив, но он должен
# быть ассоциативным в роли ключей выступают 
# placeholder’ы
# данные, которые мы вставляем
$data = array( 'name' => ‘Александр Пушкин',
			   'addr' => 'набережная реки Мойки, д.12',
			   'city' => ‘Санкт-Петербург' );
$query = $dbh->prepare("INSERT INTO folks (name, addr, city) VALUES (:name, :addr, :city)");
$query->execute($data);
Описание слайда:
Именные placeholder’ы # здесь тоже можно передавать массив, но он должен # быть ассоциативным в роли ключей выступают # placeholder’ы # данные, которые мы вставляем $data = array( 'name' => ‘Александр Пушкин', 'addr' => 'набережная реки Мойки, д.12', 'city' => ‘Санкт-Петербург' ); $query = $dbh->prepare("INSERT INTO folks (name, addr, city) VALUES (:name, :addr, :city)"); $query->execute($data);

Слайд 19





Именные placeholder’ы
# класс для простенького объекта
class person {
	public $name;
	public $addr;
	public $city;
	function __construct($n,$a,$c) 
	{
		$this->name = $n;
		$this->addr = $a;
		$this->city = $c;
	} # так далее...
}
$pushkin = new person('Александр Пушкин', 'набережная реки Мойки, д.12', 'Санкт-Петербург');
# а тут самое интересное
$query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");
$query->execute((array)$pushkin);
Описание слайда:
Именные placeholder’ы # класс для простенького объекта class person { public $name; public $addr; public $city; function __construct($n,$a,$c) { $this->name = $n; $this->addr = $a; $this->city = $c; } # так далее... } $pushkin = new person('Александр Пушкин', 'набережная реки Мойки, д.12', 'Санкт-Петербург'); # а тут самое интересное $query = $dbh->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)"); $query->execute((array)$pushkin);

Слайд 20





Выборка данных
Данные могут быть получены методом ->fetch.
Существует несколько констант для установки режимов получения данных:
PDO::FETCH_ASSOC: возвращает массив с названиями столбцов в виде ключей
PDO::FETCH_NUM: возвращает массив с ключами в виде порядковых номеров столбцов
PDO::FETCH_BOTH (по умолчанию): возвращает массив с индексами как в виде названий столбцов, так и их порядковых номеров.
PDO::FETCH_OBJ: возвращает анонимный объект со свойствами, соответствующими именам столбцов
PDO::FETCH_CLASS: присваивает значения столбцов соответствующим свойствам указанного класса. Если для какого-то столбца свойства нет, оно будет создано
И некоторые другие
Для установки режима получения данных существует следующий синтаксис: 
$query->setFetchMode(PDO::FETCH_ASSOC);
Описание слайда:
Выборка данных Данные могут быть получены методом ->fetch. Существует несколько констант для установки режимов получения данных: PDO::FETCH_ASSOC: возвращает массив с названиями столбцов в виде ключей PDO::FETCH_NUM: возвращает массив с ключами в виде порядковых номеров столбцов PDO::FETCH_BOTH (по умолчанию): возвращает массив с индексами как в виде названий столбцов, так и их порядковых номеров. PDO::FETCH_OBJ: возвращает анонимный объект со свойствами, соответствующими именам столбцов PDO::FETCH_CLASS: присваивает значения столбцов соответствующим свойствам указанного класса. Если для какого-то столбца свойства нет, оно будет создано И некоторые другие Для установки режима получения данных существует следующий синтаксис: $query->setFetchMode(PDO::FETCH_ASSOC);

Слайд 21





Режим FETCH_ASSOC
# поскольку это обычный запрос без placeholder’ов,
# можно сразу использовать метод query()
$query = $dbh->query('SELECT name, addr, city FROM folks');
# устанавливаем режим выборки 
$query->setFetchMode(PDO::FETCH_ASSOC);
while($row = $query->fetch())
{
	echo $row['name'] . "\n";
	echo $row['addr'] . "\n";
	echo $row['city'] . "\n"; 
}
Описание слайда:
Режим FETCH_ASSOC # поскольку это обычный запрос без placeholder’ов, # можно сразу использовать метод query() $query = $dbh->query('SELECT name, addr, city FROM folks'); # устанавливаем режим выборки $query->setFetchMode(PDO::FETCH_ASSOC); while($row = $query->fetch()) { echo $row['name'] . "\n"; echo $row['addr'] . "\n"; echo $row['city'] . "\n"; }

Слайд 22





fetchAll()
Возвращает массив, содержащий все строки результирующего набора
$query = $dbh->query('SELECT name, addr, city FROM folks');
$query->setFetchMode(PDO::FETCH_ASSOC);
$row = $query->fetchAll())
	echo $row[0]['name'] . "\n";
	echo $row[1]['name'] . "\n";
Описание слайда:
fetchAll() Возвращает массив, содержащий все строки результирующего набора $query = $dbh->query('SELECT name, addr, city FROM folks'); $query->setFetchMode(PDO::FETCH_ASSOC); $row = $query->fetchAll()) echo $row[0]['name'] . "\n"; echo $row[1]['name'] . "\n";

Слайд 23





fetchAll()
	Использование этого метода для извлечения строк больших результирующих наборов может пагубно сказаться на производительности системы и сетевых ресурсов. 
	Вместо извлечения всех данных и их обработки в PHP рекомендуется использовать встроенные средства СУБД. Например, использование выражений WHERE и ORDER BY языка SQL может уменьшить размеры результирующего набора.
Описание слайда:
fetchAll() Использование этого метода для извлечения строк больших результирующих наборов может пагубно сказаться на производительности системы и сетевых ресурсов. Вместо извлечения всех данных и их обработки в PHP рекомендуется использовать встроенные средства СУБД. Например, использование выражений WHERE и ORDER BY языка SQL может уменьшить размеры результирующего набора.

Слайд 24





PDO и оператор LIMIT
В режиме эмуляции данные, которые были переданы напрямую в execute(), форматируются как строки. То есть, экранируются кавычками. Поэтому LIMIT ?,? превращается в LIMIT '10', '10' и очевидным образом вызывает ошибку синтаксиса.
$query = $dbh->prepare('SELECT * FROM table LIMIT ?, ?'); 
$query->bindParam(1, $limit_from, PDO::PARAM_INT);
$query->bindParam(2, $per_page, PDO::PARAM_INT);
$query->execute(); 
$data = $query->fetchAll();
Описание слайда:
PDO и оператор LIMIT В режиме эмуляции данные, которые были переданы напрямую в execute(), форматируются как строки. То есть, экранируются кавычками. Поэтому LIMIT ?,? превращается в LIMIT '10', '10' и очевидным образом вызывает ошибку синтаксиса. $query = $dbh->prepare('SELECT * FROM table LIMIT ?, ?'); $query->bindParam(1, $limit_from, PDO::PARAM_INT); $query->bindParam(2, $per_page, PDO::PARAM_INT); $query->execute(); $data = $query->fetchAll();

Слайд 25





Метод lastInsertID()
Метод ->lastInsertId() возвращает id последней вставленной записи. Стоит заметить, что он всегда вызывается у объекта базы данных (у нас это $dbh), а не объекта с выражением ($query).
$query = $dbh->prepare("INSERT INTO folks ( first_name ) values ( 'Пушкин' )");
$query->execute();
# Выведет последний ID, вставленный в БД
echo $dbh->lastInsertId();
Описание слайда:
Метод lastInsertID() Метод ->lastInsertId() возвращает id последней вставленной записи. Стоит заметить, что он всегда вызывается у объекта базы данных (у нас это $dbh), а не объекта с выражением ($query). $query = $dbh->prepare("INSERT INTO folks ( first_name ) values ( 'Пушкин' )"); $query->execute(); # Выведет последний ID, вставленный в БД echo $dbh->lastInsertId();

Слайд 26





Метод exec()
Запускает SQL запрос на выполнение и возвращает количество строк, задействованных в ходе его выполнения
/* Удалить все строки, где присутствует слово "набережная" в адресе */
$count = $dbh->exec("DELETE FROM folks WHERE addr LIKE '%набережная%'");
/* Возвращает количество удалённых строк */
print("Удалено $count строк.\n");
Описание слайда:
Метод exec() Запускает SQL запрос на выполнение и возвращает количество строк, задействованных в ходе его выполнения /* Удалить все строки, где присутствует слово "набережная" в адресе */ $count = $dbh->exec("DELETE FROM folks WHERE addr LIKE '%набережная%'"); /* Возвращает количество удалённых строк */ print("Удалено $count строк.\n");

Слайд 27





Метод rowCount()
Возвращает количество строк, модифицированных последним SQL запросом.
Описание слайда:
Метод rowCount() Возвращает количество строк, модифицированных последним SQL запросом.

Слайд 28





Закрытие соединения
# закрывает подключение
$dbh = null;
Описание слайда:
Закрытие соединения # закрывает подключение $dbh = null;

Слайд 29





Администрирование баз данных MySQL
phpmyadmin (http://mati.su/db/phpmyadmin/ )
Команда mysql из командной строки операционной системы
Описание слайда:
Администрирование баз данных MySQL phpmyadmin (http://mati.su/db/phpmyadmin/ ) Команда mysql из командной строки операционной системы

Слайд 30





Ссылки по теме
http://phpfaq.ru/pdo
http://habrahabr.ru/post/137664/
http://www.php.net/manual/en/pdo.constants.php
http://blog.jelastic.com/2014/02/06/software-stacks-market-share-january-2014/ 
https://dev.mysql.com
Описание слайда:
Ссылки по теме http://phpfaq.ru/pdo http://habrahabr.ru/post/137664/ http://www.php.net/manual/en/pdo.constants.php http://blog.jelastic.com/2014/02/06/software-stacks-market-share-january-2014/ https://dev.mysql.com



Похожие презентации
Mypresentation.ru
Загрузить презентацию