如何使用phpmyadmin编写存储过程以及如何通过php使用它?
我希望能够使用phpMyAdmin
创build存储过程,稍后通过php使用它。
但我不知道如何?
据我所知,我发现我们不能通过phpMyAdmin
pipe理存储过程。
还有哪些工具可以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。 不知道你会如何解决它,如果你不。
- 分隔符;;
- CREATE PROCEDURE sp_number_example_records()
- 开始
客户SELECT count(id); 结束 - ;;
以上所有的答案都做出了一定的假设。 在1and1中有一些基本的问题,某些其他的托pipe服务提供商正在使用phpMyAdmin的版本,这些版本很老,并且有一个定义分隔符的问题; 并没有办法改变它从phpMyAdmin。 以下是方法
- 在托pipe提供商上创build一个新的PHPMyAdmin。 附加链接给你的想法http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
- 通过复杂的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$$