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 中的编写程序错误的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:内存不足 Zend 错误 / PhpMyAdmin
phpMyAdmin 应用程序因“致命错误:未捕获的 ValueError:mysqli_result::data_seek()”而崩溃