Подтвердить что ты не робот

PHP: mysql v mysqli v pdo

Я читал некоторые вопросы относительно использования mysqli versus pdo для использования mysql в php.

Я видел такие вопросы, как mysqli или PDO - каковы плюсы и минусы? или Переход от mysql к mysqli или pdo?, которые имеют дело исключительно с mysqli v pdo. Меня не так интересует, какой из этих двух методов лучше.

Мне было интересно, почему следует избегать функций mysql_. Конечно, они находятся в процессе устаревания для документации PHP http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated, поток PHP PDO и MySQLi показывают, что PDO и MySQLi более эффективны, а поток В чем разница между MySQL, MySQLi и PDO? подразумевает, что эти новые методы более безопасны.

В целом, мне интересно, какие большие недостатки в методах mysql_ и какие причины есть для его устранения (я думаю, более конкретно, чем просто потому, что он устарел). Я планирую обновить мои затронутые сценарии и стал любопытно, почему этот старый метод устарел.

Спасибо!

4b9b3361

Ответ 1

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

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

Функции mysql являются продуктом самых ранних дней PHP и значительно более ограничены, чем новые объектно-ориентированные функции, предлагаемые как mysqli как опция, так и PDO по дизайну.

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

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

Ответ 2

От выбора MySSQL API @PHP.net:

// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

// mysql
$c = mysql_connect("example.com", "user", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);

Создание объекта, такого как mysqli и PDO, является рекомендуемым способом написания любого современного программного обеспечения. Разрыв mysql был выпущен для PHP версии 2.0 и с тех пор не был переписан. PHP 2.0 был выпущен в 1997 году, этого должно быть достаточно, чтобы объяснить, почему его не использовать.

Ответ 3

Хорошо для одного, функции mysql чрезвычайно подвержены SQL-инъекции, если вы неправильно очищаете ввод вручную. mysqli и pdo имеют параметризованные параметры оператора sql, избегая этого риска. На мой взгляд, у них также, как правило, лучший стиль кодирования.