在php中断存储过程(mysql)的执行

时间:2016-09-21 09:37:49

标签: php mysql stored-procedures insert break

我写了一个存储过程(mysql)

CREATE PROCEDURE `set_SiteAttendance`(IN _UserName VARCHAR(20)  CHARSET utf8, IN _EventDesc VARCHAR(250)  CHARSET utf8, IN _EventTime BIGINT(20))
BEGIN

    DECLARE _EventID INT;
    DECLARE cursorGetID CURSOR FOR

        SELECT id
        FROM client_pages
        WHERE name = _EventDesc
        LIMIT 0, 1;

    -- try to add a new record to the database
    INSERT INTO client_pages (id, name) SELECT (IFNULL(MAX(id), 0) + 1), _EventDesc FROM client_pages;

    -- get id from the database records
    OPEN cursorGetID;
    FETCH cursorGetID INTO _EventID;

    -- set the data on the visit of the page in the database
    INSERT INTO login_history VALUES (NULL, _UserName, _EventID, _EventTime);

END

当我使用MySQL Workbench调用它时,它可以正常工作。

CALL set_SiteAttendance('MyName', 'page#1', 100);

当我使用php调用它时,存储过程在INSERT语句中中止

$query = "CALL set_SiteAttendance('$user_name', '$user_page', $user_ticks)";
mysql_query($query);

mysql_error()调用问题

  

重复输入'页面#1'关键字'名称'

为什么会发生以及如何解决?

2 个答案:

答案 0 :(得分:0)

嗯,这很明显。您在name上有一个唯一索引,因此您的查询INSERT INTO client_pages (id, name) SELECT (IFNULL(MAX(id), 0) + 1), _EventDesc FROM client_pages;只能使用相同的_EventDesc参数运行一次。

删除索引或更改过程的逻辑。

答案 1 :(得分:0)

我决定了我的问题:

INSERT IGNORE INTO client_pages (id, name) SELECT (IFNULL(MAX(id), 0) + 1), _EventDesc FROM client_pages;

错误(找到名称)被忽略,程序没有中断