mysql - 如何知道在存储过程中插入查询是否成功?

标签 mysql sql stored-procedures

我正在编写一个存储过程来创建播放器:

CREATE PROCEDURE `create_player` (
firstName TEXT CHARACTER SET utf8,
lastName TEXT CHARACTER SET utf8,
username TEXT CHARACTER SET utf8,
password TEXT CHARACTER SET utf8,
email TEXT CHARACTER SET utf8,
gender ENUM('m','f'),
avatar INTEGER,
OUT result INTEGER)
BEGIN
DECLARE insertVal INTEGER DEFAULT 0;

INSERT INTO `Players` 
(`PlayerFirstName`, 
`PlayerLastName`, 
`PlayerName`, 
`PlayerPassword`, 
`PlayerEmail`,
`PlayerGender`, 
`PlayerAvatar`, 
`PlayerJoinDate`) VALUES (
 firstName,lastName,username,player_hash_password(password),email,gender,avatar,NOW());
END

假设我想让用户知道这个插入是否成功,我怎么知道它是否成功(受影响的行数)。我试图将一个整数变量 = 设置为插入语句,但这没有用。

存储过程错误检查的典型方式是什么?

最佳答案

根据 ROW_COUNT() 上的 MySQL 文档,

ROW_COUNT() returns the number of rows changed, deleted, or inserted by the last statement if it was an UPDATE, DELETE, or INSERT. For other statements, the value may not be meaningful

insert 语句之后,您可以将row_count() 读入OUT 参数result。在调用程序中使用相同的 result 值让用户知道受影响的行数。

如下更改您的程序:

DROP PROCEDURE IF EXISTS `create_player`;

delimiter //

CREATE PROCEDURE `create_player` (
    firstName TEXT CHARACTER SET utf8,
    lastName TEXT CHARACTER SET utf8,
    username TEXT CHARACTER SET utf8,
    password TEXT CHARACTER SET utf8,
    email TEXT CHARACTER SET utf8,
    gender ENUM('m','f'),
    avatar INTEGER,
    OUT result INTEGER )
BEGIN
    DECLARE insertVal INTEGER DEFAULT 0;

    INSERT INTO `Players`(
        `PlayerFirstName`, 
        `PlayerLastName`, 
        `PlayerName`, 
        `PlayerPassword`, 
        `PlayerEmail`,
        `PlayerGender`, 
        `PlayerAvatar`, 
        `PlayerJoinDate`)
    VALUES (
        firstName, lastName, username, 
        player_hash_password( password ), 
        email, gender, avatar, NOW() );

    SELECT ROW_COUNT() INTO result;
END;

//

delimiter ;

关于mysql - 如何知道在存储过程中插入查询是否成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713368/

相关文章:

mysql - 查询基于 GROUP BY 添加增量字段

mysql - 如何获取两个查询的共同结果?

mysql - mysql存储过程中保存日志信息

sql - 如何删除MySQL中的所有孤立记录?

基于 2 个表的 MySQL 计数值(使用 group by?)

Python存储过程未运行,没有错误

sql-server - 如果@Parameter = NULL,则选择所有行

php - MySQL 和 PHP 中的更新查询不起作用

MySQL View 、子查询和左连接的组合产生了奇怪的结果

MYSQL - 过滤连续的非空日期