繁体   English   中英

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

[英]interrupt the execution of the stored procedure (mysql) in php

我写了一个存储过程(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页”重复

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

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

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

我决定了我的问题:

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

错误(找到名称)被忽略,过程未中断

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM