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

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

Но я не знаю, как это сделать?

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

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

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

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

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

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

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

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

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

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

введите описание изображения здесь

Добавить рутину

введите описание изображения здесь

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

попробуй это

 delimiter ;; drop procedure if exists test2;; create procedure test2() begin select 'Hello World'; end ;; 

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

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

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

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

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

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

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

Откройте любую базу данных, вы увидите новую вкладку вверху, называемую Routines , затем выберите Add Routine .

В первом тесте, которое я сделал, появилось следующее сообщение об ошибке:

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

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

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

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

  1. Создайте новый PHPMyAdmin для хостинг-провайдера. Прикрепленная ссылка дает вам идею http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
  2. Пройдите через сложный маршрут, чтобы иметь доступ к вашим хостинг-провайдерам 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$$