You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB存储过程创建报#1064语法错误,求助排查解决

解决MariaDB存储过程#1064语法错误的问题

问题背景

搭建练习网站时,使用XAMPP托管的phpMyAdmin创建存储过程查询用户权限,始终触发#1064语法错误,调整DECLARE语句位置后仍未解决。

错误原因分析

  1. 未指定自定义分隔符:MariaDB默认用;作为语句结束符,存储过程内部的;会提前终止存储过程的创建语句,导致语法解析失败。
  2. 使用非MariaDB支持的语法:代码末尾的GO是SQL Server的批处理结束符,MariaDB不识别该语法。
  3. 变量名与字段名冲突:参数username、pass和users表的字段名重名,会导致SQL解析时出现歧义。
  4. 拼写错误:priviligeid(正确应为privilegeid)、userprivleges(正确应为userprivileges)存在拼写错误,会引发表/字段匹配失败或语法问题。

修正后的完整代码

-- 设置自定义分隔符,避免与存储过程内的分号冲突
DELIMITER //

CREATE PROCEDURE CHECKUSERPRIVILEGES(
    IN p_username VARCHAR(32),  -- 参数加前缀p_,避免和字段名冲突
    IN p_pass VARCHAR(32)
)
BEGIN
    DECLARE v_userid INT(11);
    DECLARE v_privilegeid BIGINT(16);  -- 修正拼写错误
    
    -- 查询用户ID,使用带前缀的参数消除歧义
    SELECT UserID INTO v_userid
    FROM users
    WHERE Username = p_username AND Pass = p_pass;
    
    -- 查询用户权限ID,修正表名拼写为userprivileges
    SELECT PrivilegeID INTO v_privilegeid
    FROM userprivileges
    WHERE UserID = v_userid;
    
    -- 查询权限详情
    SELECT * FROM PRIVILEGES WHERE PrivilegeID = v_privilegeid;
END //

-- 恢复默认分隔符
DELIMITER ;

额外注意事项

  • 在phpMyAdmin中执行存储过程创建语句时,必须先设置自定义分隔符(比如//),否则会直接触发语法错误。
  • 变量名建议加前缀(如v_)、参数加前缀(如p_),避免和表字段名重名引发歧义。
  • 调用存储过程时,使用语句:CALL CHECKUSERPRIVILEGES('你的用户名', '你的密码');

内容的提问来源于stack exchange,提问作者SCP-1762

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:02:33