Как написать хранимую процедуру, используя phpmyadmin и как использовать ее через php? - PullRequest
60 голосов
/ 17 мая 2010

Я хочу иметь возможность создавать хранимые процедуры, используя phpMyAdmin, а затем использовать его через php.

Но я не знаю как?

Из того, что я знаю, я узнал, что мы не можем управлять хранимыми процедурами через phpMyAdmin.

Какой другой инструмент может управлять хранимой процедурой?

Я даже не уверен, что лучше использовать хранимую процедуру через PHP. Есть предложения?

Ответы [ 10 ]

93 голосов
/ 17 мая 2010

Поскольку хранимая процедура создается, изменяется и удаляется с помощью запросов, вы МОЖЕТЕ управлять ими с помощью phpMyAdmin.

Для создания хранимой процедуры вы можете использовать следующее (при необходимости измените):

CREATE PROCEDURE sp_test()
BEGIN
  SELECT 'Number of records: ', count(*) from test;
END//

И убедитесь, что для поля «Разделитель» на вкладке SQL установлено значение //.

.

После того, как вы создали хранимую процедуру, она появится в наборе полей «Подпрограммы» под вашими таблицами (на вкладке «Структура»), и вы можете легко изменить / удалить ее.

Чтобы использовать хранимую процедуру из PHP, вы должны выполнить запрос CALL, как вы это делаете в обычном SQL.

59 голосов
/ 01 января 2014

Я думаю, никто не упомянул об этом, поэтому я напишу это здесь. В phpMyAdmin 4.x есть ссылка «Добавить подпрограмму» на вкладке «Подпрограммы» в верхней строке. Эта ссылка открывает всплывающее диалоговое окно, в котором вы можете написать хранимую процедуру, не беспокоясь о разделителе или шаблоне.

enter image description here

Добавить подпрограмму

enter image description here

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

25 голосов
/ 29 апреля 2011

попробуйте

delimiter ;;

drop procedure if exists test2;;

create procedure test2()

begin

select ‘Hello World’;

end

;;
1 голос
/ 27 мая 2013
  1. разделитель ;;
  2. CREATE PROCEDURE sp_number_example_records ()
  3. НАЧАТЬ
    ВЫБЕРИТЕ количество (идентификатор) от клиента; END
  4. ;;
1 голос
/ 27 июня 2012

В новой версии phpMyAdmin (3.5.1) значительно улучшена поддержка хранимых процедур; в том числе: редактирование, выполнение, экспорт, создание PHP-кода и некоторая отладка.

Убедитесь, что вы используете расширение mysqli в config.inc.php

$cfg['Servers'][$i]['extension'] = 'mysqli';

Откройте любую базу данных, вверху вы увидите новую вкладку под названием Рутины , затем выберите Добавить рутину .

Первый тест, который я сделал, выдал следующее сообщение об ошибке:

MySQL сказал: # 1558 - неверное количество столбцов в mysql.proc. Ожидаемое 20, найдено 16. Создано с MySQL 50141, теперь работает 50163. Пожалуйста, используйте mysql_upgrade, чтобы исправить эту ошибку.

Блог Ciuly предоставляет хорошее решение, если у вас есть доступ к командной строке. Не уверен, как бы вы это исправить, если вы этого не сделаете.

1 голос
/ 11 мая 2012

Я заставил его работать в phpAdmin, но только когда я удалил фразу "Количество записей".

В моей версии phpAdmin я мог видеть поле для изменения разделителей.

Также, чтобы увидеть процедуру в базе данных, я пошел в дом phpAdmin, затем в базу данных information_schema, а затем в таблицу процедур.

1 голос
/ 17 мая 2010

Попробуйте Toad для MySQL - это бесплатно и здорово.

0 голосов
/ 02 октября 2017
/*what is wrong with the following?*/
DELIMITER $$

CREATE PROCEDURE GetStatusDescr(
    in  pStatus char(1), 
    out pStatusDescr  char(10))
BEGIN 
    IF (pStatus == 'Y THEN
 SET pStatusDescr = 'Active';
    ELSEIF (pStatus == 'N') THEN
        SET pStatusDescr = 'In-Active';
    ELSE
        SET pStatusDescr = 'Unknown';
    END IF;

END$$
0 голосов
/ 09 декабря 2014

На локальном сервере ваш следующий запрос будет работать

DELIMITER |

CREATE PROCEDURE sample_sp_with_params (IN empId INT UNSIGNED, OUT oldName VARCHAR(20), INOUT newName VARCHAR(20))

BEGIN

SELECT `first name` into oldName FROM emp where id = empId;

UPDATE emp SET `first name`= newName where id = empId;

END

|

DELIMITER ;

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

CREATE PROCEDURE adminsections( IN adminId INT UNSIGNED ) SELECT tbl_adminusersection.ads_name, tbl_adminusersection.ads_controller FROM tbl_adminusersectionright LEFT JOIN tbl_adminusersection ON ( tbl_adminusersectionright.adsr_ads_id = tbl_adminusersection.ads_id ) LEFT JOIN tbl_adminusers ON ( tbl_adminusersectionright.adsr_adusr_id = tbl_adminusers.admusr_id ) WHERE tbl_adminusers.admusr_id = adminId;

надеюсь, это тебе поможет.

спасибо

0 голосов
/ 28 ноября 2013

Все ответы выше делают определенные предположения. В 1and1 есть основные проблемы, и некоторые другие хостинг-провайдеры используют версии phpMyAdmin, которые очень старые и имеют проблему с определителем разделителя; и нет способа изменить его с phpMyAdmin. Ниже приведены способы

  1. Создайте новый PHPMyAdmin на хостинг-провайдере. Прикрепленная ссылка дает вам представление http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
  2. Пройдите по сложному маршруту, чтобы иметь возможность доступа к вашим хостинг-провайдерам mySQL с вашего декста. Это сложно, но лучше, если вы серьезный разработчик. вот ссылка, чтобы сделать это http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/

Надеюсь, это поможет

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