Как создать хранимую процедуру MySQL из PHP? - PullRequest
5 голосов
/ 13 января 2009

Все мои попытки запросить MySQL из PHP с помощью инструкции создания процедуры хранилища (SP) не увенчались успехом. Разве это не возможно?

Если возможно, приведите пример.

Ответы [ 5 ]

3 голосов
/ 07 декабря 2011

Помимо привилегий, вполне вероятно, что ваша проблема может заключаться в том, что на самом деле mysql_query ($ query) может выполнять только одну команду на вызов!

Итак, вам нужно разделить команды на несколько вызовов mysql_query ($ query).

Что я имею в виду, примерно так:

$query = "DROP FUNCTION IF EXISTS fnElfProef (accountNr INT)";

mysql_query($query);

$query = "CREATE FUNCTION fnElfProef (accountNr INT)
    RETURNS BOOLEAN
       BEGIN
          DECLARE i, totaal INT DEFAULT 0;
          WHILE i < 9 DO
             SET i = i+1;
             SET totaal = totaal+(i*(accountNr%10));
             SET accountNr = FLOOR(accountNr/10);
          END WHILE;
       RETURN (totaal%11) = 0;
    END";
mysql_query($query);


$query = "SELECT * FROM mytable";
mysql_query($query);
2 голосов
/ 13 января 2009

Пока:

  • Вы используете MySQL 5.0 +
  • Ваша учетная запись была авторизована для создания хранимой процедуры
  • Вы используете правильный синтаксис CREATE PROCEDURE

Тогда это должно работать. Проверьте это и вернитесь к нам.

1 голос
/ 08 сентября 2016

Вы не можете использовать оператор DELIMITER из PHP. Таким образом,

1) remove the DELIMITER statements
2)and change all your delimiters to ;

Это раздражает, потому что теперь вам нужна версия с DELIMITERS для разработки и тестирования в командной строке MySQL или инструмент MySQL, такой как sqlyog или MySQL, и версия без DELIMITERS для использования через вашу PHP-программу.

Если кто-то знает лучший способ, я бы хотел услышать его - (но не вызывая скрипт оболочки ОС - у него слишком много остаточных проблем).

И вам нужны СУПЕР разрешения.

1 голос
/ 13 января 2009

В руководстве MySQL содержится четкий обзор , как создавать хранимые процедуры ( 13.1.15. CREATE PROCEDURE и CREATE FUNCTION Синтаксис ) .

Следующий вопрос: имеет ли учетная запись, которую вы используете для доступа к базе данных MySQL, права propper для фактического создания процедуры?

Подробности по этому вопросу можно найти здесь: 19.2.2. Хранимые процедуры и привилегии MySQL

0 голосов
/ 13 января 2009

Достаточно ли у вас прав доступа к учетной записи, с которой вы подключаетесь из PHP? С инструкция

Начиная с MySQL 5.0.3, для выполнения СОЗДАТЬ ПРОЦЕДУРУ или СОЗДАТЬ ФУНКЦИЮ Заявление, необходимо иметь CREATE ROUTINE привилегия

См. Также Сохраненные процедуры и привилегии MySQL в руководстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...