Зачем мне делать обертку базы данных? - PullRequest
2 голосов
/ 10 февраля 2011

Мне действительно интересно, зачем мне нужен обертка базы данных для PHP.Как оболочка для MySQLi или PDO.Это класс, который вызывает класс PDO / MySQLi.Зачем мне это нужно?Преимущества?Я постараюсь сделать один - просто у меня нет основной цели.Зачем мне это нужно ??=] * * Тысяча одна

Ответы [ 4 ]

3 голосов
/ 10 февраля 2011

Я могу придумать как минимум две причины:

1) Рефакторинг.Технологии меняются, поэтому вы должны стремиться локализовать необходимые изменения (чтобы сделать их быстро и без риска).Несколько лет назад у вас не было MySQLi или PDO.Если бы вы разработали оболочку для классического расширения MySQL, вы могли бы легко переключиться, скажем, на PDO, не меняя всех клиентов оболочки.С другой стороны, замена сотен вызовов с mysql_connect() на mysqli_connect() звучит не так привлекательно.

2) Тестируемость.Если вы практикуете автоматическое тестирование, добавляя слой косвенности (оболочки), это означает, что вы можете легко заменить его поддельным.Как следствие, вы контролируете, действительно ли запросы поступают в базу данных или, например, регистрируются в файле.Результат - более быстрые и более управляемые тесты.

1 голос
/ 10 февраля 2011

Абстракции типа PDO предназначены для того, чтобы сделать вещи более безопасными.Вы могли бы сказать, что выполнение базы данных, которое вы хотите сделать, будет «строго типизированным», что означает, что что-то подобное будет предотвращено:

$myDangerousSql = "select * from dbA where x ='"+$someVariable+"'";

Вышеприведенное может привести к тому, что называется1007 * sql-инъекция .

При использовании PDO вы явно говорите «x будет иметь тип string» или любой другой тип, который вы используете в своей базе данных.Таким образом, оператор может быть «подготовлен», и, таким образом, вы не сможете «вставить» в него новый SQL-код.Что делает его более безопасным.

Это только одна из причин, но, скорее всего, самая большая.И не пишите свою собственную обертку / абстракцию, если она не предназначена для обучения, там уже есть много хороших.

Вот хороший пост, в котором говорится о Абстракция базы данных в PHP .

0 голосов
/ 10 февраля 2011

Если вы собираетесь использовать оболочку поверх PDO, не пишите ее, там уже много написано.У вас есть Doctrine, ActiveRecord, Zend_Db и, возможно, многие другие.

0 голосов
/ 10 февраля 2011

Мне не понятно, о чем вы здесь спрашиваете.Но я бы предположил, что PDO - это уже то, о чем вы говорите, это «уровень абстракции доступа к данным» , что означает, что вы можете использовать один и тот же код для общения с различными СУБД и легко переключаться между ниминеобходимость изменения кода (при условии, что вы используете SQL, совместимый с тем, что вы переключаетесь).

MySQLi - это расширение, используемое для прямого доступа к базам данных MySQL, а также есть расширения для Oracle и других СУБД ».

...