Отредактированный ответ.
Имея некоторый опыт работы с обоими этими API, я бы сказал, что есть 2 функции уровня блокировки, которые делают mysqli непригодным для использования с собственно подготовленными операторами.
Они уже упоминались в 2 превосходных (но недооцененных) ответах:
- Привязка значений к произвольному количеству заполнителей
- Возврат данных в виде простого массива
(оба также упоминаются в этом ответе )
По некоторым причинам mysqli потерпел неудачу с обоими.
В настоящее время он получил некоторое улучшение для второго ( get_result ), но он работает только на установках mysqlnd, что означает, что вы не можете полагаться на эту функцию в своих скриптах.
Тем не менее, он не имеет привязки по стоимости даже по сей день.
Итак, выбор один: PDO
Все остальные причины, такие как
- именованные заполнители (этот синтаксис сахар слишком переоценен)
- поддержка различных баз данных (на самом деле никто никогда не использовал ее)
- извлечь в объект (просто бесполезный синтаксис сахара)
- разница в скорости (нет)
не имеют никакого существенного значения.
В то же время у обоих этих API отсутствуют некоторые действительно важные функции , такие как
- идентификатор заполнителя
- заполнитель для сложных типов данных, чтобы сделать динамическое связывание менее трудоемким
- более короткий код приложения.
Таким образом, для удовлетворения реальных потребностей необходимо создать собственную библиотеку абстракций, основанную на одном из этих API-интерфейсов, реализующую обработанные вручную заполнители. В этом случае я бы предпочел mysqli, поскольку он имеет меньший уровень абстракции.