如何使用phpmyadmin编写存储过程以及如何通过php使用它?

我希望能够使用phpMyAdmin创build存储过程,稍后通过php使用它。

但我不知道如何?

据我所知,我发现我们不能通过phpMyAdminpipe理存储过程。

还有哪些工具可以pipe理存储过程?

我甚至不确定是否更好的select通过PHP使用存储过程。 任何build议?

由于存储过程是使用查询创build,更改和删除的,所以您实际上可以使用phpMyAdminpipe理它们。

要创build存储过程,可以使用以下(根据需要进行更改):

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

并确保您将SQL选项卡上的“分隔符”字段设置为//。

一旦你创build了存储过程,它将出现在你的表下的例程字段集中(结构标签),你可以很容易地更改/删除它。

要使用PHP中的存储过程,您必须执行一个CALL查询,就像在普通SQL中一样。

我想没有人提到这个,所以我会写在这里。 在phpMyAdmin 4.x中,在顶部的“例程”标签下有“添加例程”链接。 此链接打开一个popup对话框,您可以在其中编写存储过程而不用担心分隔符或模板。

在这里输入图像描述

添加例程

在这里输入图像描述

请注意,对于简单的testing存储过程,您可能希望删除已经给出的默认参数,或者您可以简单地使用一个值来设置它。

尝试这个

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

尝试蟾蜍为MySQL – 它的自由和伟大的。

我得到它在phpAdmin的工作,但只有当我删除“logging数”短语。

在我的phpAdmin版本中,我可以看到更改分隔符的框。

也看到数据库中的程序我去了phpAdmin家,然后information_schema数据库,然后是例程表。

新版本的phpMyAdmin(3.5.1)对存储过程有更好的支持; 包括:编辑,执行,导出,PHP代码创build和一些debugging。

确保你在config.inc.php中使用mysqli扩展

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

打开任何数据库,你会在顶部看到一个新的标签Routines ,然后selectAdd Routine

我做的第一个testing产生了以下错误信息:

MySQL说:#1558 – mysql.proc的列数是错误的。 预计20,find16.创build与MySQL 50141,现在运行50163.请使用mysql_upgrade修复此错误。

假设你有命令行访问, Ciuly的Blog提供了一个很好的解决scheme。 不知道你会如何解决它,如果你不。

  1. 分隔符;;
  2. CREATE PROCEDURE sp_number_example_records()
  3. 开始
    客户SELECT count(id); 结束
  4. ;;

以上所有的答案都做出了一定的假设。 在1and1中有一些基本的问题,某些其他的托pipe服务提供商正在使用phpMyAdmin的版本,这些版本很老,并且有一个定义分隔符的问题; 并没有办法改变它从phpMyAdmin。 以下是方法

  1. 在托pipe提供商上创build一个新的PHPMyAdmin。 附加链接给你的想法http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
  2. 通过复杂的path可以从您的dekstop访问您的托pipe服务提供商mySQL。 这是复杂的,但最好的,如果你是一个严肃的开发人员。 这里是一个链接来做到这一点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$$