пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ


38.Принципи доступу до БД засобами РНР

Для соединения с базой данных MySQL имеется три разных API:
mysql
mysqli – MySQL Improved (улучшенная)
pdo – PHP Data Objects (объекты данных PHP)

Традиционный API mysql хорошо выполняет свою работу и получил широкое распространение благодаря тому, что делает процесс получения записей из базы данных очень простым. Например:
view source

print
?01 /*
02 * Демонстрация старого способа работы с базой данных MySQL
03 */
04
05 # Соединение
06 mysql_connect('localhost', 'username', 'password') or die('Could not connect: ' . mysql_error());
07
08 # Выбор базы данных
09 mysql_select_db('someDatabase') or die('Не могу выбрать базу данных');
10
11 # Выполнение запроса
12 $query = "SELECT * from someTable";
13 $result = mysql_query($query) or die('Query failed: ' . mysql_error());
14
15 # Фильтрация строк и вывод нужной информации
16 while ($row = mysql_fetch_object($result))
17 echo $row->name;
18


Да, приведенный пример очень прост. Но у него есть существенные недостатки:
Устарел: хотя официально его не признают устаревшим, но для новых приложений и обучения лучше использовать другие API.
Очистка: процесс очистки ввода пользователя от ненужного кода ложится на плечи разработчика.
Гибкость: данный API не гибкий и работает только с базой данных MySQL

PDO (PHP Data Objects) предоставляет более мощный инструмент для использования. Не нужно думать о драйвере базы данных, можно использовать подготовленные выражения, исключаются инъекции кода SQL.

При работе с PDO нужно создать новый экземпляр класса, указать драйвер, имя базы данных, имя пользователя и пароль:
view source

print
?1 $conn = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);

ADODB — это абстрактный класс доступа к базам данных, написанный на PHP.

Поясню на примере:

Предположим вы написали скрипт под mysql. И тут заказчик говорит Вам, что хостинг меняется и там есть только PostgreSQL. Если вы не использовали класс абстрактного доступа к базам данных, то вам пришлось бы:
заменить весь код работы с mysql на postgresql
переписать SQL-запросы (так как есть отличия)

Если бы вы использовали абстрактный слой доступа к БД, то вам скорее всего не пришлось бы менять php-код (только в одном месте указали бы что используете postgresql) и изменить SQL-запросы (хотя иногда и это не понадобилось бы).

PEAR

Как ни стандартно, при разработке проектов мы сделаем один файл connect.php, который будет подключатся к нашей базе в каждом скрипте, где это необходимо:
------------- connect.php ------------
require_once("DB.php");
#подключаем класс DB PEAR

$TypeSQL= "mysql";
$Host="localhost";
$User="YourPasswordSQL"
$Name="YourNameSQL";
$Dbase="MyDBase";
//Все так же, как и делали раньше, только добавилась переменная $TypeSQL, в которой мы
//и указываем, какая у нас База Данных.

# прописываем источник DSN http://pear.sourceforge.net/manual/core.db.tut_dsn.php
$dsn="$TypeSQL://$User:$Password@Host/$Dbase"
$db= DB::connect($dsn, true);
#Что соответствует знакомому по MySQL: mysql_db_connect() и mysql_db_select
$db->setFetchMode(DB_FETCHMODE_ASSOC);
//выбор формата выбираемых строк. В нашем случае мы используем
// fetchRow().А вообще, кому что нравится
//http://pear.sourceforge.net/manual/core.db.setfetchmode.php.

?>

Вот, в принципе, и весь наш connect. И если мы захотим использовать другую базу данных, нам в этом скрипте необходимо заменить значение переменной $TypeSQL, к примеру, на "pgsql" (PostgreSQL).

Противники таких массивных классов, как ADODB или Pear::DB утверждают, что их использование плохо сказывается на производительнеости. Да, производительность падает и это вполне логично. НО:
Скорость не часто является самым важным фактором
(Мало кто из вас пишет сайты с очень большой нагрузкой, на которых бы это снижение производительности стало критичным)
Использование таких классов повышает производительность программиста
При использовании софта, типа phpAccelerator падение производительности будет не таким заметным (и я не поверю, что популярные сайты не имеют возможности использовать такой софт)
Разработчики ADODB написали php-extension, который ускоряет работу класса (но работать можно и без него)


хиты: 401
рейтинг:0
Точные науки
информатика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь