#php #mysql #exec #shell-exec
Вопрос:
Что лучше ( в производительности/ответе ) в отношении запросов PHP/mysql, пожалуйста:
- Использование обычной библиотеки mysqli
- Использование exec(‘база данных mysql -u user -pPassword-e «запрос» 2gt;amp;1 ‘)
Кстати, я забочусь не о оперативной памяти сервера, а о процессоре сервера, мне нужен быстрый ответ пользователю, и для этого мне нужен ваш совет.
Спасибо
Комментарии:
1. Никогда не используйте «exec(‘база данных mysql -u user -pPassword-e «запрос» 2gt;amp;1 ‘)». Я даже не буду вдаваться во все проблемы, которые это приносит. Давайте просто назовем это гигантской дырой в системе безопасности
2. О чем ты спрашиваешь? Я не понимаю, почему вы хотели бы использовать любой из них.
3. Эухен, да, я в курсе безопасности, так что с этим мы разберемся позже.
4. Дхарман, мой вопрос касается производительности. Так что на самом деле mysqli создает соединение с сервером, а затем делает запрос. Exec выполняет запрос непосредственно в mysql, без связи с сервером. это прямой запрос, как будто вы выполняете программу или сценарий оболочки с параметрами. Ответ с помощью exec будет мгновенным, ответ с помощью mysqli будет похож на передачу данных сервером.
5. @MohamedMetoui На самом деле это не вопрос производительности. Даже если вам удастся заставить предложенную идею работать, что не является заданным, учитывая возвращаемые значения exec, последствия этого для безопасности будут слишком велики. Время и ресурсы, потраченные на разработку защиты для этой штуки, будут огромными. Любая «возможная» производительность, которую вы могли бы «возможно» получить, приведет к тому, что вы потеряете гораздо более эффективную защиту для этого. Php был разработан не дураками — используйте инструменты, которые идут вместе с языком.
Ответ №1:
Используйте библиотеку (mysqli или PDO). Период. Полная остановка.
Потребности exec
, которые необходимо выполнить
- Запустите процесс (на клиенте)
- Запуск
mysql
(на клиенте) - Подключение к mysql (как клиент, так и сервер)
- Подготовка и выполнение запроса (в основном сервер)
- Отсоединить (оба)
- завершение процесса (на клиенте)
И это позволило выполнить только один «запрос»
С mysqli
:
- Подключитесь к mysql один раз (оба)
- Подготовьте и выполните множество запросов (по одному за раз) (в основном сервер)
- отключитесь один раз (оба)
То есть вместо того, чтобы использовать процессор, оперативную память, ввод-вывод и т. Д. В течение 6 шагов для выполнения одного запроса, вы используете эти ресурсы для подключения только один раз, а не один раз на запрос.
То есть ресурсов меньше для подхода mysqli, по крайней мере, при выполнении нескольких «запросов». И клиент определенно выполняет меньше работы, даже по одному запросу.
«нет связи с сервером» — Нет. Это невозможно. Вся работа с базой данных всегда выполняется на сервере. Клиент делает немногим больше, чем отправляет запросы и получает результаты.
mysql
это клиентская программа. mysqld
это сервер. Они разные. Подумайте об mysql
отдельной программе, в которой есть библиотека, эквивалентная встроенной «mysqli».