За последние 24 часа нас посетили 21554 программиста и 1023 робота. Сейчас ищут 719 программистов ...

PDO vs MySqli vs MySql

Тема в разделе "PHP и базы данных", создана пользователем in_hood, 28 авг 2019.

Метки:
?

Что используете

  1. PDO

    5 голосов
    71,4%
  2. MySqli

    2 голосов
    28,6%
  3. MySql

    0 голосов
    0,0%
  1. in_hood

    in_hood Новичок

    С нами с:
    28 авг 2019
    Сообщения:
    2
    Симпатии:
    0
    Добрый день, имеется небольшая самописная CRM система, работа с базой происходит через mysql, я задумался над тем, чтобы перейти на mysqli или PDO, в связи с этим мне интересно получить ваш совет и ответы на мои вопросы:

    1. Знаю, что PDO предпочтительней потому что можно использовать 12 типов баз данных и при переходе на другой тип бд, не надо переписывать все запросы, но если я знаю, что с вероятностью 90% эта база вряд ли когда будет заменена на другую, стоит ли оно того, ведь mySqli пусть и совсем на чуть чуть, но быстрее вроде как? (Скорость для меня важна)

    2. Касаемо защиты от инъекций, как я понял mysqli_real_escape_string() считается дурным тоном, только не понял почему? Потому что он хуже защищает, чем подготовленные выражения в PDO и mySqli или просто потому что стиль написания не удобен? Я правильно понимаю, если к примеру в PDO я использую:
    <?
    $pdo->prepare('SELECT * FROM users WHERE username = :username AND fio = :fio');
    $arInfo[':username'] = $_GET['username'];
    $arInfo[':fio'] = $_GET['fio'];
    $pdo->execute($arInfo);
    ?>
    То это меня защищает от всех возможных инъекций?

    3. Интересно было бы узнать, что вы используете в своих проектах и почему?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Моё IMHO: в 10-х годах XXI века уже нет выбора. PDO давно победил:) и не только потому, что он более универсален. mysqli имеет неудачную реализацию плейсхолдеров, вот прям очень неудобно с ней работать. скорость исполнения скрипта не так важна, как удобство разработки.

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

    от sql-инъекций — да. а не от всех :) когда дело касается безопасности, не бывает ничего абсолютного :)

    PDO, обёрнутый во что-нибудь ради дополнительного удобства, типа Laravel Eloquent или Doctrine DBAL.
     
    in_hood и runcore нравится это.
  3. in_hood

    in_hood Новичок

    С нами с:
    28 авг 2019
    Сообщения:
    2
    Симпатии:
    0
    Спасибо за ответ) Я понимаю, что в плане безопасности никогда не может быть 100% гарантии, но мне все же интересно, надо ли как-то серьезней с заморачиваться с безопасностью при работе с бд ну к примеру не знаю проверка там на тип данных, которые я вставляю в бд, может еще, что-нибудь чего я не знаю или это все паранойя и при работе с бд достаточно защиты от sql инъекций?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    1. Можно MySQLi.

    2. Экранирование значений (особенно объемных) и их обработка сервером требуют доп. времени, но нужно, естественно, также учитывать большую сложность самих подготовленных запросов (их повторное использование в расчет не беру). От дурака ничто не защитит. Если пихать куда попало что попало, будет ой-ой-ой.

    3. И то, и др. Больших неудобств при использовании плэйсхолдеров в MySQLi в отличие от пред. постера не испытываю.
     
    in_hood нравится это.