Мне действительно интересно, зачем мне нужна оболочка базы данных для PHP. Как оболочка для MySQLi или PDO. Это класс, который вызывает класс PDO/MySQLi. Зачем мне это нужно? Преимущества? Попробую сделать - только не понимаю основной цели. Зачем мне это нужно?? знак равно
Зачем мне делать оболочку базы данных?
Ответы (4)
Такие абстракции, как PDO
, призваны сделать вещи более безопасными. Вы могли бы сказать, что выполнение базы данных, которое вы хотите выполнить, будет «строго типизированным», что означает, что что-то подобное будет предотвращено:
$myDangerousSql = "select * from dbA where x ='"+$someVariable+"'";
Вышеприведенное может привести к тому, что называется sql-injection.
При использовании PDO
вы явно говорите, что «x будет иметь тип string» или любой другой тип, который вы используете в своей базе данных. Таким образом, оператор может быть "подготовлен" и, таким образом, вы не можете "внедрить" в него новый SQL-код. Что делает его более безопасным.
Хотя это только одна из причин, но, скорее всего, самая главная. И не пишите свою собственную оболочку/абстракцию, если это не для целей обучения, уже есть много хороших.
Вот хороший пост, посвященный абстракции базы данных в PHP.
Я могу назвать как минимум две причины:
1) Рефакторинг. Технологии меняются, поэтому нужно стремиться к локализации необходимых изменений (чтобы сделать их быстро и без риска). Несколько лет назад у вас не было MySQLi или PDO. Если бы вы разработали оболочку для классического расширения MySQL, вы могли бы легко переключиться, скажем, на PDO, не меняя всех клиентов-оболочек. С другой стороны, замена сотен вызовов с mysql_connect()
на mysqli_connect()
звучит не так привлекательно.
2) Тестируемость. Если вы практикуете автоматизированное тестирование, добавление слоя косвенности (обертки) означает, что вы можете легко заменить его поддельным. Как следствие, вы контролируете, действительно ли запросы отправляются в базу данных или, например, регистрируются в файле. Результатом являются более быстрые и управляемые тесты.
Я не понимаю, что вы здесь спрашиваете. Но я бы предположил, что PDO — это уже то, о чем вы говорите, это "доступ к данным уровень абстракции", что означает, что вы можете использовать один и тот же код для взаимодействия с различными СУБД и легко переключаться между ними, не изменяя свой код (при условии, что вы используете SQL, совместимый с тем, между чем вы переключаетесь).
MySQLi — это расширение, используемое для прямого доступа к базам данных MySQL, а также существуют расширения для Oracle и других СУБД.
Если вы собираетесь использовать оболочку поверх PDO, не пишите ее, уже много написано. У вас есть Doctrine, ActiveRecord, Zend_Db и, вероятно, многие другие.
- http://www.phpactiverecord.org/
- http://www.doctrine-project.org/
- http://framework.zend.com/manual/en/zend.db.html