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

时间:2010-05-17 03:36:57

标签: php stored-procedures mysql phpmyadmin

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

但我不知道怎么办?

据我所知,我发现我们无法通过phpMyAdmin管理存储过程。

还有哪些其他工具可以管理存储过程?

我甚至不确定通过PHP使用存储过程是否更好。 有任何建议吗?

10 个答案:

答案 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中,顶行的“例程”选项卡下有“添加常规”链接。此链接将打开一个弹出对话框,您可以在其中编写存储过程,而无需担心分隔符或模板。

enter image description here

添加例程

enter image description here

请注意,对于简单的测试存储过程,您可能希望删除已经给出的默认参数,或者只需使用值设置它。

答案 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)

  1. 分隔符;;
  2. CREATE PROCEDURE sp_number_example_records()
  3. BEGIN
    来自客户的SELECT count(id); END
  4. ;;

答案 7 :(得分:0)

上述所有答案都在做出某些假设。 1and1中存在基本问题,而某些其他托管服务提供商正在使用phpMyAdmin版本,这些版本非常陈旧且存在定义分隔符的问题;并且无法从phpMyAdmin更改它。以下是方式

  1. 在托管服务提供商处创建新的PHPMyAdmin。附加链接为您提供了http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
  2. 的想法
  3. 通过复杂的路径,从您的dekstop访问您的托管服务提供商mySQL。它很复杂,但如果你是一个认真的开发人员,那就最好了。这是一个指向http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/
  4. 的链接

    希望这有帮助

答案 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$$