MySQL查询在终端中工作但不能在PHP中工作

时间:2014-09-26 23:43:09

标签: php mysql

我想在我的PHP代码中使用以下MySQL查询:

DELIMITER | 
CREATE EVENT event1
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO
BEGIN 
   UPDATE user SET access_flag = 0 WHERE user_id = 1;
   UPDATE user SET access_counter = 0 WHERE user_id = 1;
END;
| DELIMITER ;

这是我的PHP代码:

$sql="DELIMITER | CREATE EVENT event$user_id
                    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
                    DO
                    BEGIN 
                    UPDATE user SET access_flag = 0 WHERE user_id = $user_id;
                    UPDATE user SET access_counter = 0 WHERE user_id = $user_id;
                    END;
                    | DELIMITER";
              if (!mysqli_query($con,$sql)) {
              die('Error: ' . mysqli_error($con));
              }

而且,这是我得到的错误:

  

错误:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在“DELIMITER”附近使用正确的语法创建活动事件9在CURRENT_TIMESTAMP + INTERVAL'在第1行

有趣的是,当我在终端或MySQL Workbrench中直接执行MySQL查询时,它运行正常。我做错了什么?

实际上,我通过消除多个语句并使用这样的查询来实现它:

CREATE EVENT event1
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO 
UPDATE user SET access_flag = 0,
access_counter = 0 WHERE user_id = 1;

感谢您的提示。我仍然不知道为什么它首先没有工作......

1 个答案:

答案 0 :(得分:0)

试试这个:

$sql="CREATE EVENT event$user_id 
       ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE 
         DO 
           BEGIN 
              UPDATE user SET access_flag = 0, access_counter = 0
              WHERE user_id = $user_id; 
           END;"; 

请注意,在控制台中使用DELIMITER来更改原始的MySQL分隔符“;”,因此不应破坏查询。在PHP中,您无需更改分隔符。当表相同时,你也可以使用一个UPDATE,只需将不同的状态分开, 另请注意,您只能创建一次EVENT。