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

Сохраненные процедуры не проходят в мире php/mysql?

Я цитирую часть ответа, который я получил за еще один мой вопрос:

В мире PHP/MySQL я бы сказал хранимые процедуры не работают

Я хотел бы знать: это так? Зачем? Почему бы и нет?

[edit] Я имею в виду это как общий вопрос без особой необходимости [/edit]

4b9b3361

Ответ 1

Я разрабатываю и поддерживаю большое приложение PHP/MySQL. Вот мой опыт работы с хранимыми процедурами.

С течением времени наше приложение стало очень сложным. И со всей логикой на стороне php некоторые операции будут запрашивать базу данных с более чем 100 короткими запросами.

MySQL настолько быстр, что производительность по-прежнему приемлема, но не велика.

Мы приняли решение в нашей последней версии программного обеспечения переместить часть логики на хранимые процедуры для сложных операций.

Мы достигли значительного прироста производительности из-за того, что нам не приходилось отправлять данные назад и вперед между PHP и MySQL.

Я согласен с другими плакатами здесь, что PL/SQL не является современным языком и его трудно отлаживать.

Bottom Line: Хранимые процедуры - отличный инструмент для определенных ситуаций. Но я бы не рекомендовал их использовать, если у вас нет веских оснований. Для простых приложений хранимые процедуры не стоят проблем.

Ответ 2

При использовании хранимых процедур с MySQL вам часто потребуется использовать mysqli интерфейс в PHP, а не обычный mysql.

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

Интерфейс mysqli имеет функции обработки этих нескольких наборов результатов, таких как mysqli_more_results и mysqli_next_result.

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

Ответ 3

Есть ли у вас конкретная потребность, которая заставляет вас их рассматривать? Хранимые процедуры гораздо менее переносимы, чем "простой" SQL, что обычно означает, что люди не хотят их использовать. Кроме того, написав справедливую долю PL/SQL, я должен сказать, что процедурный способ написания кода добавляет сложности, и он просто не очень современный или проверяемый. Они могут быть полезны в некоторых особых случаях, когда вам нужно оптимизировать, но я бы, конечно, подумал дважды. Джефф имеет похожие мнения.

Ответ 4

Я вообще избегаю хранимых процедур, потому что он добавляет нагрузку на базу данных, которая составляет 99% времени, что является самым большим узким местом. Добавление нового php-сервера ничто по сравнению с созданием репликации MySQL db.

Ответ 5

Это субъективный вопрос.

Я бы лично включил все вычисления в PHP и действительно использовал MySQL в качестве таблицы.

Но, если вы чувствуете, что проще использовать хранимые процедуры, то непременно сделайте это.

Ответ 6

Я бы не сказал, что "хранимые процедуры - это не-go", я бы сказал: "Не используйте их без уважительной причины".

У хранимых процедур MySQL есть особенно ужасный синтаксис (Oracle и MSSQL тоже довольно ужасны), поддерживая их, просто усложняет ваше приложение.

Используйте хранимую процедуру, если у вас есть реальная (измеримая) причина для этого, иначе нет. Это мое мнение в любом случае.

Ответ 7

Вероятно, существует фобия хранимых процедур с mysql, отчасти из-за того, что она не является чрезвычайно мощной (по сравнению с Postgresql и даже MSSQL, хранимые процедуры mysqls значительно отсутствуют).

В плюсе: они упрощают взаимодействие с ним с нескольких языков.

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

В наши дни очень популярно использовать ORM, но я лично считаю, что ORM - это BadThing (Вопрос: 82882)

Ответ 8

Я думаю, что использование хранимых процедур может предлагать некоторую абстракцию в определенных приложениях, как и в любом месте, где вы бы использовали один и тот же кусок кода SQL для обновления или добавления тех же данных, тогда вы могли бы создать один sproc save_user ($ attr.....) скорее, повторяя себя повсюду.

Согласованный синтаксис является волосатым, и если вы использовали для MSSQL и spaccs oracle, существуют различия, которые могут быть испорчены.

Ответ 9

Вы также должны знать, что хранимые процедуры не поддерживались в Mysql до версии 5.0. http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html Также хранимые процедуры, как правило, были немного странными в этой реализации. Теперь, когда Mysql 5.1 начинает возникать в дикой природе, я вижу больше использования хранимых процедур с помощью Mysql.

Ответ 10

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