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

标签 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() 调用问题

Duplicate entry 'page#1' for key 'name'

为什么会发生这种情况以及如何解决?

最佳答案

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

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

关于php - 中断php中存储过程(mysql)的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612825/

相关文章:

php - DataTable - 通过 Controller 中的客户 ID 限制 View

php - PHP 中依赖注入(inject)容器的直接示例

mysql - MySQL 中的 id 为空,无法显示空答案

mysql - 尝试创建 sql 过程,使用 concat 时出现错误

PHP MongoDB 删除文档并返回

php - 用于网络分析的数据集 API

mysql - 获取所有产品,并将特定订单的产品放在前面

mysql - 在 mysql 列中使用另一个查询

mysql - 是否可以从另一个 sql 脚本中的存储过程调用 sql 脚本?

java - 通过Java调用PL\SQL : Registering out parameter as boolean