我希望能够使用phpMyAdmin
创建存储过程,然后通过php使用它。
据我所知,我发现我们无法通过phpMyAdmin
管理存储过程。
还有哪些其他工具可以管理存储过程?
我甚至不确定通过PHP使用存储过程是否更好。 有任何建议吗?
答案 0 :(得分:93)
由于存储过程是使用查询创建,更改和删除的,因此您实际上可以使用phpMyAdmin管理它们。
要创建存储过程,您可以使用以下内容(根据需要进行更改):
CREATE PROCEDURE sp_test()
BEGIN
SELECT 'Number of records: ', count(*) from test;
END//
并确保将SQL选项卡上的“Delimiter”字段设置为//.
创建存储过程后,它将显示在表格下方的Routines字段集中(在Structure选项卡中),您可以轻松地更改/删除它。
要使用PHP中的存储过程,您必须执行CALL查询,就像在纯SQL中一样。
答案 1 :(得分:59)
我想没人提到这个,所以我会在这里写。在phpMyAdmin 4.x中,顶行的“例程”选项卡下有“添加常规”链接。此链接将打开一个弹出对话框,您可以在其中编写存储过程,而无需担心分隔符或模板。
添加例程
请注意,对于简单的测试存储过程,您可能希望删除已经给出的默认参数,或者只需使用值设置它。
答案 2 :(得分:25)
试试这个
delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;
答案 3 :(得分:1)
尝试使用Toad for MySQL - 它是免费的,非常棒。
答案 4 :(得分:1)
我让它在phpAdmin中工作,但只有当我删除了“记录数”这个短语。
在我的phpAdmin版本中,我可以看到用于更改分隔符的框。
另外要查看数据库中的程序,我去了phpAdmin主页,然后是information_schema数据库,然后是例程表。
答案 5 :(得分:1)
新版本的phpMyAdmin(3.5.1)对存储过程有更好的支持;包括:编辑,执行,导出,PHP代码创建和一些调试。
确保在config.inc.php中使用mysqli扩展
$cfg['Servers'][$i]['extension'] = 'mysqli';
打开任何数据库,您会在顶部看到一个名为 Routines 的新标签,然后选择添加例程。
我做的第一个测试产生了以下错误消息:
假设您具有命令行访问权限,MySQL说:#1558 - mysql.proc的列数是错误的。预计20,发现16.使用MySQL 50141创建,现在运行50163.请使用mysql_upgrade修复此错误。
Ciuly's Blog提供了一个很好的解决方案。如果你不这样做,不知道如何修复它。
答案 6 :(得分:1)
答案 7 :(得分:0)
上述所有答案都在做出某些假设。 1and1中存在基本问题,而某些其他托管服务提供商正在使用phpMyAdmin版本,这些版本非常陈旧且存在定义分隔符的问题;并且无法从phpMyAdmin更改它。以下是方式
希望这有帮助
答案 8 :(得分:0)
在本地服务器上,您的以下查询将起作用
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;
希望它会帮助你。
感谢
答案 9 :(得分:0)
/*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$$