Phpmyadmin 中的编写程序错误

Posted

技术标签:

【中文标题】Phpmyadmin 中的编写程序错误【英文标题】:error in writing procedure in Phpmyadmin 【发布时间】:2013-12-22 03:33:17 【问题描述】:

我正在尝试在mysql phpmyadmin中写一个存储过程,过程是

DELIMITER $$

DROP FUNCTION IF EXISTS `shopping_portal`.`f_authenticate_admin`$$
CREATE PROCEDURE =`root`@`localhost` FUNCTION `f_authenticate_admin`(l_username VARCHAR(50),l_password VARCHAR(50)) RETURNS int(11)
BEGIN
    DECLARE exist INT DEFAULT 0;
    SELECT count(*) INTO exist FROM admin WHERE username=l_username and password=MD5(l_password);
    RETURN exist;
END$$

DELIMITER ;

但它正在抛出错误

 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=`root`@`localhost` FUNCTION `f_authenticate_admin`(l_username VARCHAR(50),l_pas' at line 1 

帮助我编写此程序。提前致谢。

【问题讨论】:

嗯...你真的阅读了错误信息吗?它说明了你的错误在哪里:='root'@'localhost' 这与 PHP 无关。删除标签... 【参考方案1】:

嗯,多个问题:

您正在混合程序和功能,这是两个不同的故事。您可能正在寻找DEFINER 和您的= root@localhost。而且您想使用单引号而不是反引号(但我不确定,如果这真的是一个问题)。无论如何,让我为你重写它......

DROP PROCEDURE IF EXISTS `shopping_portal`.`f_authenticate_admin`;
DELIMITER $$

CREATE DEFINER = 'root'@'localhost' PROCEDURE `f_authenticate_admin`(IN l_username VARCHAR(50), IN l_password VARCHAR(50), OUT result tinyint) 
BEGIN
    SELECT EXISTS(SELECT 1 FROM admin WHERE username=l_username and password=MD5(l_password)) INTO result;
END$$

DELIMITER ;

然后你可以这样称呼它:

CALL f_authenticate_admin('test_username', 'a_password', @a_variable);

那么你的结果是@a_variable

SELECT @a_variable;

结果是 1 或 0。

【讨论】:

以上是关于Phpmyadmin 中的编写程序错误的主要内容,如果未能解决你的问题,请参考以下文章

mariadb 程序 phpmyadmin 错误

致命错误:内存不足 Zend 错误 / PhpMyAdmin

phpMyAdmin 应用程序因“致命错误:未捕获的 ValueError:mysqli_result::data_seek()”而崩溃

无法在 phpmyadmin 中创建程序

尝试编写 MySQL 触发器以替换 phpmyadmin 上的 CHECK 约束时出现语法错误

PHPmyadmin 错误