Как написать хранимую процедуру с использованием phpmyadmin и как ее использовать через php?
Я хочу иметь возможность создавать хранимые процедуры с помощью phpMyAdmin
, а затем использовать его через php.
Но я не знаю как?
Из того, что я знаю, я узнал, что мы не можем управлять хранимыми процедурами через phpMyAdmin
.
Какой еще инструмент может управлять хранимой процедурой?
Я даже не уверен, что лучше использовать хранимую процедуру через PHP. Любое предложение?
Ответы
Ответ 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$$