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

Как написать хранимую процедуру с использованием phpmyadmin и как ее использовать через php?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

И убедитесь, что вы установили поле "Delimiter" на вкладке SQL на //.

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

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

Ответ 2

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

enter image description here

Добавить обычную

enter image description here

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

Ответ 3

попробуйте это

delimiter ;;

drop procedure if exists test2;;

create procedure test2()

begin

select ‘Hello World’;

end

;;

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

Новая версия 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 обеспечивает хорошее решение, предполагая, что у вас есть доступ к командной строке. Не знаете, как вы это исправите, если вы этого не сделаете.

Ответ 7

  • разделитель;;
  • ПРОЦЕДУРА СОЗДАНИЯ sp_number_example_records()
  • НАЧАТЬ
    SELECT count (id) от клиента; END
  • ;;

Ответ 8

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

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

Ответ 9

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

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;

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

спасибо

Ответ 10

/*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$$