我正在编写一个存储过程来创建播放器:
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 anUPDATE
,DELETE
, orINSERT
. 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/