it-swarm.com.ru

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

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

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

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

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

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

58
Starx

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

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

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

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

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

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

92
wimvds

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

enter image description here

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

enter image description here

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

57
Hammad Khan

попробуй это

delimiter ;;

drop procedure if exists test2;;

create procedure test2()

begin

select ‘Hello World’;

end

;;
25
Sourav

В новой версии 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
Paul J

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

1
ronaldosantana
  1. разделитель ;;
  2. CREATE PROCEDURE sp_number_example_records ()
  3. НАЧАТЬ
    SELECT count (id) от клиента; END
  4. ;;
1
Jay Thakkar

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

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

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

1
Reto

Все ответы выше делают определенные предположения. В 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/

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

0
Sandeep Taneja

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

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
Delickate
/*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
Ajnabi