我希望能够使用创建存储过程phpMyAdmin
,以后再通过php使用它。
但是我不知道该怎么办?
据我所知,我发现我们无法通过来管理存储过程phpMyAdmin
。
还有什么其他工具可以管理存储过程?
我什至不确定通过PHP使用存储过程是否是更好的选择。有什么建议吗?
由于使用查询创建,更改和删除了存储过程,因此您实际上可以使用phpMyAdmin对其进行管理。
要创建存储过程,可以使用以下命令(必要时进行更改):
CREATE PROCEDURE sp_test()
BEGIN
SELECT 'Number of records: ', count(*) from test;
END//
并确保将“ SQL”选项卡上的“分隔符”字段设置为//。
创建存储过程后,该过程将出现在表下方的“例程”字段集中(在“结构”选项卡中),您可以轻松地对其进行更改/删除。
要使用PHP中的存储过程,您必须执行CALL查询,就像在普通SQL中一样。
我猜没有人提到这一点,所以我将在这里写下。在phpMyAdmin 4.x中,第一行的“例程”选项卡下有“添加例程”链接。该链接打开一个弹出对话框,您可以在其中编写存储过程,而不必担心定界符或模板。
添加例程
请注意,对于简单的测试存储过程,您可能要删除已经给定的默认参数,或者可以简单地用一个值设置它。
尝试这个
delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;
尝试使用Toad for MySQL-它免费且功能强大。
我可以在phpAdmin中使用它,但是仅当我删除了“记录数”短语时才可以。
在我的phpAdmin版本中,我可以看到用于更改定界符的框。
同样要查看数据库中的过程,我去了phpAdmin主页,然后进入了information_schema数据库,然后进入了例程表。
新版本的phpMyAdmin(3.5.1)对存储过程提供了更好的支持。包括:编辑,执行,导出,PHP代码创建和一些调试。
确保您在config.inc.php中使用mysqli扩展名
$cfg['Servers'][$i]['extension'] = 'mysqli';
打开任何数据库,您将在顶部看到一个名为Routines的新标签,然后选择Add Routine。
我所做的第一个测试产生了以下错误消息:
MySQL说:#1558-mysql.proc的列数错误。预期为20,找到16。使用MySQL 50141创建,现在运行50163。请使用mysql_upgrade修复此错误。
假设您具有命令行访问权限,Ciuly的Blog提供了一个很好的解决方案。不知道如果不解决该如何解决。
- 定界符;;
- 创建过程sp_number_example_records()
- BEGIN
从客户SELECT COUNT(ID); 结束 - ;;
以上所有答案均做出某些假设。1and1中存在一些基本问题,某些其他托管服务提供商正在使用phpMyAdmin版本,这些版本非常古老,并且存在定义的定界符为的问题;并且没有办法从phpMyAdmin进行更改。以下是方法
- 在托管提供程序上创建一个新的PHPMyAdmin。附件链接为您提供了想法http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
- 通过复杂的途径,可以从您的dekstop访问托管服务提供商mySQL。如果您是一个认真的开发人员,这很复杂,但是最好。这是执行此操作的链接http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/
希望这可以帮助
/*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$$
在本地服务器上,您的以下查询将起作用
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;
文章标签:mysql , php , phpmyadmin , stored-procedures
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!