Сравнение MySQL с MySQLi и PDO Оценка производительности, разницы и безопасности в 2016 и 2017 годах - Поиск конвертера и пакетов ORM онлайн урок.


Содержание

1. PDO против MySQLi vs MySQL

2. Разница в соединении с использованием MySQLi и PDO

3. PDO против MySQLi против производительности производительности MySQL

4. PDO против MysQLi Security с использованием подготовленных операторов

5. Сравнение между PDO и MySQLi Условия использования

6. Преобразование приложений MySQL для использования PDO или MySQLi

7. Рекомендации по пакету для использования с PDO и MySQLi

8. Что использовать в новом проекте: PDO или MySQLi?

1. PDO против MySQLi vs MySQL

Как мы все знаем, MySQL представляет собой систему управления реляционными базами данных с открытым исходным кодом (RDBMS), которая использует язык структурированных запросов (SQL). MySQL является центральным компонентом стека программного обеспечения веб-приложений LAMP с открытым исходным кодом (и других стеков «AMP»): Apache MySQL и PHP.

MySQL является неотъемлемой частью почти всех приложений PHP с открытым исходным кодом. Хорошими примерами для скриптов на PHP и MySQL являются phpBB, osCommerce и Joomla.

PHP, который использовался с оригинальным встроенным расширением MySQL, который поддерживает более старые версии MySQL. Однако это расширение было устаревшим в пользу MySQLi (i для улучшения). В то же время PHP продолжал развиваться, и было добавлено расширение PDO (PHP Data Objects), чтобы стать общим интерфейсом для доступа к многим типам баз данных.

MySQLi является еще одним из трех способов доступа к серверу базы данных MySQL. Подобно расширению MySQL, новый MySQLi был разработан для лучшего использования более поздних функций сервера MySQL.

Расширение объектов данных PHP (PDO) определяет легкий общий интерфейс для доступа к базам данных на PHP. Каждый драйвер базы данных, поддерживаемый интерфейсом PDO, может раскрывать специфические функции базы данных, а также общие функции.

PDO обеспечивает уровень абстракции доступа к данным, что означает, что независимо от того, какой тип базы данных вы используете, те же функции доступны для выполнения запросов и получения результатов. PDO не обеспечивает полную абстракцию базы данных. то есть он не переписывает SQL-запросы или не эмулирует отсутствующие функции. Если вам нужна эта возможность, вы должны использовать полноразмерный пакет уровня абстракции.

2. Разница в соединении с использованием MySQLi и PDO

Либо PDO, и MySQLi предлагают объектно-ориентированный интерфейс для функций расширения, но MySQLi также предлагает процедурный API, который облегчает понимание новичков. Если вы знакомы с исходным расширением PHP MySQL, вы сможете легко перейти на процедурный интерфейс MySQLi. Ниже приведен пример:

PDO
$ pdo = новый PDO ("mysql:". "Host = localhost;". "Dbname = database", 'username', 'password');
mysqli, процедурный способ
$ mysqli = mysqli_connect ('localhost', 'username', 'password', 'database');
mysqli, объектно-ориентированный путь
$ mysqli = new mysqli ('localhost', 'username', 'password', 'database');

Основное преимущество PDO над MySQLi заключается в поддержке базы данных. PDO поддерживает 12 разных типов баз данных, в отличие от MySQLi, которая поддерживает только MySQL.

Когда вам нужно переключить свой проект на использование другой базы данных, PDO упрощает процесс. Таким образом, все, что вам нужно сделать, это изменить строку подключения и, самое большее, несколько запросов, если они используют любой синтаксис, который не поддерживается вашей новой базой данных.

3. PDO vs MysQLi Security с использованием подготовленных выражений

Оба PDO и MySQLi поддерживают поддержку подготовленных запросов. Это помогает предотвратить проблемы безопасности SQL-инъекций, пока вы используете только готовые запросы для вставки динамических параметров в запросы.

Например, рассмотрите хакера, который пытается внедрить вредоносный SQL, передающий поддельное значение в параметркод& nbsp; запроса HTTP POST, который можно эмулировать следующим образом:

$ _POST ['code'] = "'; DELETE FROM products; *";

Если вы не избежите этого значения, оно будет вставлено в запрос как есть, и поэтому оно удалит все строки из таблица продуктов.

Один из способов сделать запросы более безопасными, избегая инъекции SQL, - это указать значения параметров строки, чтобы вставить escape-символы.

PDO, «ручное» экранирование
$ name = PDO:: quote ($ _POST ['code']);
$ pdo- & gt; query ("SELECT id, name FROM products WHERE code = $ code");
mysqli, «manual» escaping
$ name = mysqli_real_escape_string ($ _POST ['code']);
$ mysqli- & gt; query ("SELECT id, name FROM products WHERE name = '$ code'");

PDO:: quote () не только ускользает от строки, но также добавляет кавычки. mysqli_real_escape_string () вытеснит только строку, поэтому вам нужно будет добавить кавычки вручную.

PDO, подготовленный оператор
$ pdo- & gt; prepare ('SELECT id, name FROM products WHERE code =: code');
$ pdo- & gt; execute (array (': code' = & gt; $ _POST ['code']));
mysqli, подготовленные операторы
$ query = $ mysqli- & gt; prepare ('SELECT id, name FROM users WHERE code =?');
$ query- & gt; bind_param ('s', $ _POST ['code']);
$ query- & gt; execute ();

PDO также поддерживает запросы на стороне клиента. Это означает, что при подготовке запроса он не должен связываться с сервером.

Поскольку MySQLi использует собственные подготовленные операторы, на самом деле может быть быстрее использовать & nbsp;mysqli_real_escape_string вместо использования подготовленных операторов, хотя он по-прежнему является безопасным решением.

4. PDO против MySQLi против Benchmark производительности MySQL

Несколько лет назад были некоторые тестовые тесты производительности PHP MySQL Джонатана Робсона , а также Radu Potop . Несмотря на то, что эти тесты были выполнены с использованием PHP 5.3, и в настоящее время мы используем PHP 7 или более позднюю версию, рассмотрим эти результаты как ссылку.

В основном они показывают, что для запросов SELECT с использованием подготовленных операторов MySQLi работает немного быстрее. Тем не менее это может быть не очень важно в зависимости от ваших целей.

Имейте в виду, что PDO по умолчанию использует эмуляцию подготовленных заявлений на клиентской стороне. При использовании собственных подготовленных операторов для подготовки оператора требуется дополнительная обратная поездка на сервер, поэтому общее время выполнения запроса может быть фактически больше, чем при использовании собственных подготовленных операторов для запуска запроса только один раз.

Как уже упоминалось выше, вы можете использовать функцию mysqli_real_escape_string для цитирования динамических параметров, например, при использовании исходного расширения MySQL. Это похоже на эмуляцию подготовленных запросов так, как это делается с PDO, потому что вам не нужно будет выполнять дополнительную поездку на сервер для подготовки заявления.

5. Сравнение условий использования PDO и MySQLi

Хотя MySQLi имеет свои преимущества при доступе к функциям сервера MySQL, PDO иногда имеет ногу и может быть лучше подходит для пользователя, в зависимости от личных предпочтений и удобства. Как и большинство вещей, оптимальный вариант зависит от того, кого вы спросите, и в какой ситуации вам нужно MySQLi или PDO.

MySQLi работает только с базами данных MySQL, тогда как PDO является гибким и способным работать с несколькими системами баз данных, включая IBM, Oracle и MySQL. Если вам когда-либо приходилось переключать базы данных или предоставлять независимое от базы данных решение, использование MySQLi напрямую не является лучшим вариантом. Вы все равно можете использовать MySQLi в независимых от базы данных решениях с использованием уровня абстракции.

Связывание параметров с MySQLi не так просто или гибко, как с PDO. MySQLi использует систему с числовыми параметрами и не поддерживает именованные параметры, такие как PDO. MySQLi имеет хорошую поддержку и обслуживание, что делает переход на новую систему безопасной и безопасной.

Вы сможете использовать новые функции, доступные в более новых версиях серверов MySQL. Это одно из самых больших преимуществ MySQLi. PDO может не иметь обширной поддержки, чтобы в полной мере использовать новые возможности MySQL.

Процесс установки с MySQLi не только прост, но и является автоматическим, когда расширение PHP 5 MySQL, которое поставляется с встроенной Windows или Linux Распределения.

6. Преобразование приложений MySQL для использования PDO или MySQLi

Если у вас есть проект с использованием старого расширения MySQL, и вам нужно его преобразовать для использования MySQLi или PDO, может потребоваться некоторое время, чтобы переписать его, если вы не использовали слой абстракции базы данных.

Если вам нужно быстрое простое решение, которое не требует значительного изменения кода, вы можете попробовать либо PDO пакета, либо MySQLi использовать каждый из этих расширений с помощью функций оболочки MySQL, которые вызывают функции mysql_ * используя PDO & nbsp; Азизом С. Хуссейном или PHP MySQL для MySQLi & nbsp; Дэйвом Смитом для функций расширения PDO и MySQLi соответственно.

Это позволит вам запустить ваш код на PHP 7, пока вы действительно выполняете миграцию кода, который не требует обертки.

Дэйв Смит также написал учебное пособие по о том, как перенести mysql-код в mysqli & nbsp; учитывая различия между этими расширениями.

7. Рекомендации по пакету для использования с PDO и MySQLi

Существует множество пакетов, которые вы можете использовать для различных целей для доступа к MySQL с использованием MySQLi или PDO.

Ниже приведены некоторые из последних пакетов PHP, которые обеспечивают безопасные и эффективные оболочки для нескольких целей PDO.

PDO Резервное копирование и синхронизация базы данных

PHP Multi MySQLDump & nbsp; (Alessandro Quintiliani)

Дамп базы данных MySQL для загрузки файлов

Резервное копирование на сервер WebDav & nbsp; (Дмитрий Мамонтов)

Резервные файлы и база данных на сервер WebDav

Синхронизирующие таблицы базы данных PHP & nbsp; (Ettore Moretti)

Синхронизация таблиц между двумя базами данных с использованием PDO

DB Backup Class & nbsp; (Raul)

Генерировать резервную копию базы данных MySQL с использованием PDO

Синхронизация базы данных PHP (Jacob Fogg)

Синхронизация таблиц разных баз данных с PDO

База данных резервного копирования MySQLi

Danen MySQL Backup

& nbsp; (Gerry Danen)

Создание резервных копий базы данных SQL-операторов с использованием MySQLi

Ah MySQLi

(Atabak Hosein Nia)

Выполнение общих запросов MySQL с использованием MySQLi

DBMysqli

(Osama Salama)

Доступ к базам данных MySQL с помощью mysql и mysqli

PDO Безопасность и аутентификация

PHP Secure Token Generator

& nbsp; (Aleksandar Zivanovic)

Создание и проверка токенов, хранящихся в таблице MySQL

PHP OTP Login

(Bijaya Kumar Behera)

Аутентификация пользователей с использованием MAC-адреса компьютера

Безопасность и аутентификация MySQLi

Библиотека API OAuth PHP с учебным пособием Пример Клиент для любого сервера OAuth1 и OAuth2
(Мануэль Лемос)

Авторизация и доступ к API с использованием OAuth

Регистрация и вход в систему PDO

Безопасная система входа в систему PHP

(Subin Siby)

Зарегистрировать и войти в систему с помощью базы данных через PDO

PHP Auth Class

& nbsp; (Con vertor)

Зарегистрировать и войти в систему пользователей, хранящихся в базе данных

PHP Безопасный вход и регистрация

& nbsp; (Ashraf Gheith)

Регистрация и пользователи входа в базу данных с PDO

PDO Доступ к базе данных и абстракция

Несколько PHP PDOStatement Iterator

(Matthew Daniel)

Итерация нескольких результатов запроса с использованием PDO

PHP PDO OCI

& nbsp; (Eustaquio Rangel de Oliveira)

Доступ к базам данных Oracle с использованием оболочки класса PDO

DB Абстрактная модель

& nbsp; (Гильермо Мурильо)

Выполнение MySQL запросов, вызывающих хранимые процедуры

Доступ и абзац базы данных MySQLi

Metabase

& nbsp; (Мануэль Лемос)

Уровень абстракции базы данных PHP RDBMS независим

PHP API-интерфейс CRUD REST

(Bharat Parmar)

Сервер API REST с операциями CRUD на основе MySQL

Extended MySQLi

()

Оболочка доступа к базе данных MySQL с использованием MySQLi

PDO ORM (объектно-реляционное сопоставление)

Крошечная PHP ORM Framework

& nbsp; (Виктор Большов)

Объекты карты в базы данных с использованием составленных запросы

Caribu ORM

(Maik Greubel)

Отображать объекты в записи баз данных с использованием аннотаций

_ angel angel angel angel angel angel angel angel

_ torm

(Eustaquio Rangel)

Хранить и извлекать объекты с помощью ActiveRecord