【问题标题】:Stored procedure MYSQL error存储过程MYSQL错误
【发布时间】:2023-03-23 04:02:01
【问题描述】:

在 PHPMyAdmin 上运行以下程序时遇到一些问题,收到错误消息;

"1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 6 行的 '' 附近使用"

问题似乎出在 IF 上,更新语法独立工作,if 语句中的 select 独立工作。

有什么想法吗??

CREATE PROCEDURE Get_SessionCookie(
sessionID varchar(50),
cookieID varchar(50)
)

IF (SELECT 1 = 1 FROM `SessionCookie` WHERE SessionID = sessionID AND CookieID = cookieID AND SessionExpiry <  NOW())

UPDATE SessionCookie
SET SessionExpiry = NOW() + INTERVAL 60 MINUTE
WHERE SessionID = sessionID AND CookieID = cookieID;

SELECT 'True' FROM SessionCookie;

ELSE

SELECT 'False' FROM SessionCookie;

【问题讨论】:

    标签: mysql stored-procedures phpmyadmin


    【解决方案1】:

    一个主要问题是存储过程的参数与列具有相同的名称。你应该总是在变量名前加上一些东西。我认为,您的具体问题是您希望在if 和delimeter 语句中使用exists。我认为这更接近你想要的:

    delimiter $$
    
    CREATE PROCEDURE Get_SessionCookie (
        var_sessionID varchar(50),
        var_cookieID varchar(50)
    )
    BEGIN
        IF exists (SELECT 1
                   FROM `SessionCookie`
                    WHERE SessionID = var_sessionID AND
                          CookieID = var_cookieID AND
                          SessionExpiry <  NOW()
                  )
    
            UPDATE SessionCookie
                SET SessionExpiry = NOW() + INTERVAL 60 MINUTE
                WHERE SessionID = var_sessionID AND CookieID = var_cookieID;
    
            SELECT 'True' FROM SessionCookie;
    
        ELSE SELECT 'False' FROM SessionCookie;
        END IF
    END$$
    

    【讨论】:

    • 我在我的 phpmyadmin 版本中发现我还必须在 END$$ 之后添加 DELIMITER;
    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多