MySQL phpmyadmin 中的过程

Posted

技术标签:

【中文标题】MySQL phpmyadmin 中的过程【英文标题】:Procedure in MySQL phpmyadmin 【发布时间】:2014-09-14 07:15:29 【问题描述】:

我想在 ASP 中创建一个页面查看计数器,并想检查自上次查看某个 ip 以来是否已经过去了 10 分钟。我已经在 mysql phpmyadmin 中编写了一个程序来检查数据库。

    CREATE PROCEDURE counter(
    in  ipOfVisitor varchar(30), 
    in  pid  int(10))
BEGIN


    SELECT @visitor_IP := ip, @date_dif := DATEDIFF( CURDATE( ) , last_counted )
    FROM visitors
    WHERE ip = ipOfVisitor ;

    IF (NOT @visitor_IP = null AND @date_dif > 600) OR @visitor_IP = null THEN
    UPDATE patientifo SET numberofclicks = numberofclicks + 1 WHERE id = pid;
    END IF;
    IF NOT @visitor_IP = null AND @date_dif > 600 THEN
    UPDATE visitors SET last_counted = CURDATE( ) where ip = ipOfVisitor;
    END IF;
    IF @visitor_IP = null THEN
    INSERT INTO visitors (ip, last_counted) VALUES (ipOfVisitor, CURDATE ());
    END IF;
END

但它给出了错误

CREATE PROCEDURE counter( IN ipOfVisitor VARCHAR( 30 ) , IN pid INT( 10 ) ) BEGIN SELECT @visitor_IP := ip, @date_dif := DATEDIFF( CURDATE( ) , last_counted ) 
FROM visitors
WHERE ip = ipOfVisitor;

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 9 行的 '' 附近使用正确的语法

什么意思?

编辑

我更改了juergen d 所说的代码。

 DELIMITER |
CREATE PROCEDURE counter(
    in  ipOfVisitor varchar(30), 
    in  pid  int(10))
BEGIN
    DECLARE visitor_IP varchar(30);
    DECLARE date_dif int(10);

    SELECT ip,DATEDIFF( CURDATE( ) , last_counted ) INTO visitor_IP,  date_dif
    FROM visitors
    WHERE ip = ipOfVisitor ;

    IF (NOT visitor_IP = null AND date_dif > 600) OR visitor_IP = null THEN
    UPDATE patientifo SET numberofclicks = numberofclicks + 1 WHERE id = pid;
    END IF;
    IF NOT visitor_IP = null AND date_dif > 600 THEN
    UPDATE visitors SET last_counted = CURDATE( ) where ip = ipOfVisitor;
    END IF;
    IF visitor_IP = null THEN
    INSERT INTO visitors (ip, last_counted) VALUES (ipOfVisitor, CURDATE ());
    END IF;
END
|

它几乎可以工作。除了最后一行的这个错误: #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 '|' at line 22

【问题讨论】:

【参考方案1】:

您需要更改分隔符。否则数据库会认为您的过程定义在第一个 ; 处结束,这将是不完整的。

delimiter |
CREATE PROCEDURE counter(
    in  ipOfVisitor varchar(30), 
    in  pid  int(10))
BEGIN    
   ...
END
|

【讨论】:

它几乎可以工作,但是它在最后一行 #1064 出现错误 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '|' 附近使用的正确语法在第 22 行 好像有问题。你执行了什么代码? 实际上它对我有用。我执行了你提供的确切代码

以上是关于MySQL phpmyadmin 中的过程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 phpMyAdmin 中禁用查询分析

phpMyAdmin 错误代码:13 无法获取 './test' 的统计信息

phpMyAdmin 不允许我登录 - 没有显示错误

mysql phpmyadmin 中的存储过程 #1064

MySQL phpmyadmin 中的过程

我无法使用 springboot 连接到我的 mysql 数据库我使用相同的密码和名称与 phpmyadmin 连接得很好