Как написать хранимую процедуру с помощью phpmyadmin и как использовать ее через php?
Я хочу иметь возможность создавать хранимые процедуры, используя phpMyAdmin и позже использовать его через php.
но я не знаю как?
из того, что я знаю, я узнал, что мы не можем управлять хранимыми процедурами через phpMyAdmin.
какой другой инструмент может управлять хранимой процедурой?
Я даже не уверен, что это лучший вариант использовать хранимую процедуру через PHP. какие будут предложения?
10 ответов:
поскольку хранимая процедура создается, изменяется и удаляется с помощью запросов, вы можете управлять ими с помощью phpMyAdmin.
для создания хранимой процедуры можно использовать следующее (при необходимости изменить):
CREATE PROCEDURE sp_test() BEGIN SELECT 'Number of records: ', count(*) from test; END//и убедитесь, что вы установили поле "разделитель" на вкладке SQL в //.
после того, как вы создали хранимую процедуру, она появится в наборе полей подпрограмм под вашими таблицами (на вкладке структура), и вы можете легко изменить / удалить оно.
чтобы использовать хранимую процедуру из PHP, вы должны выполнить запрос вызова, как и в обычном SQL.
Я думаю, никто не упоминал об этом, поэтому я напишу его здесь. В phpMyAdmin 4.x, есть ссылка " добавить процедуру "на вкладке" процедуры " в верхней строке. Эта ссылка открывает всплывающее диалоговое окно, в котором вы можете написать свою хранимую процедуру, не беспокоясь о разделителе или шаблоне.
Добавить Рутинную
обратите внимание, что для простой тестовой хранимой процедуры вы можете удалить параметр по умолчанию, который уже задан, или вы можете просто установить он со значением.
попробуй такое
delimiter ;; drop procedure if exists test2;; create procedure test2() begin select ‘Hello World’; end ;;
Я получил его для работы в phpAdmin, но только когда я удалил фразу "количество записей".
в моей версии phpAdmin я мог видеть поле для изменения разделителей.
также, чтобы увидеть процедуру в базе данных, я пошел в phpAdmin home, затем в базу данных information_schema, а затем в таблицу подпрограмм.
новая версия phpMyAdmin (3.5.1) имеет гораздо лучшую поддержку хранимых процедур; в том числе: редактирование, выполнение, экспорт, создание кода PHP и некоторая отладка.
убедитесь, что вы используете mysqli расширение в config.Инк.php
$cfg['Servers'][$i]['extension'] = 'mysqli';откройте любую базу данных, вы увидите новую вкладку в верхней части под названием подпрограммы, выберите Добавить Рутинную.
первый тест, который я сделал, вызвал следующую ошибку сообщение:
MySQL сказал: #1558-количество столбцов mysql.proc-это неправильно. Ожидал 20, нашел 16. Создано с MySQL 50141, теперь работает 50163. Пожалуйста, используйте mysql_upgrade, чтобы исправить эту ошибку.
блог чули обеспечивает хорошее решение, если у вас есть доступ к командной строке. Не уверен, как вы это исправите, если вы этого не сделаете.
- разделитель ;;
- создать процедуру sp_number_example_records ()
- начать
Выберите счетчик (id) от клиента; Конец- ;;
все ответы выше делают определенные предположения. Есть основные проблемы в 1and1 и некоторые другие хостинг-провайдеры используют версии phpMyAdmin, которые очень старые и имеют проблему, которая определяет разделитель ; и нет никакого способа изменить его от phpMyAdmin. Ниже приведены способы
- создайте новый PHPMyAdmin на хостинг-провайдере. Прикрепленная ссылка дает вам представление http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
- пройдите через сложный маршрут, чтобы иметь возможность получить доступ к вашим хостинг-провайдерам mySQL с вашего dekstop. Это сложно, но лучше всего, если вы серьезный разработчик. вот ссылка, чтобы сделать это http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/
надеюсь, что это помогает
на локальном сервере ваш следующий запрос будет работать
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;надеюсь, что это поможет вам.
спасибо
/*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$$


Comments