我想使用以下函数返回最后插入的id: MySql存储函数:
CREATE DEFINER=`root`@`localhost` FUNCTION `set_user`( user_id int(11), u_name varchar(50),
pass varchar(128)) RETURNS int(11)
BEGIN
DECLARE newest_id INT(11);
INSERT INTO `test_db`.`users`
(`id`,`user_name`,`password`)
VALUES (user_id, u_name, pass);
SELECT LAST_INSERT_ID() INTO newest_id FROM test_db.users;
RETURN newest_id;
END
这是php代码:
$sp = "select test_db.set_user(1, 'uname', 'pass123')";
$res = $con->multi_query( $sp );
if( $res ) {
$results = 0;
if ($result = $con->store_result()) {
printf( "<b>Result #%u</b>:<br/>", ++$results );
while( $row = $result->fetch_assoc() ) {
echo $row["newest_id"];
}
$result->close();
}
}
该函数成功插入数据但是php没有得到单个返回值。请帮忙。
答案 0 :(得分:2)
您未将别名newest_id
分配给SELECT
的结果:
$sp = "select test_db.set_user(1, 'uname', 'pass123') AS newest_id";
过程中的变量在其外部不可见,并且不会成为SELECT
返回的列的名称。
答案 1 :(得分:1)
我已经检查过你的功能,但是需要一些改动才能完美地工作,所以请检查以下几点: - 1.在LAST_INSERT_ID的select语句上添加 LIMIT 1 ,因为 LAST_INSERT_ID()返回具有相同LAST_INSERT_ID的多行。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `set_user`( user_id int(11), u_name varchar(50),
pass varchar(128)) RETURNS int(11)
BEGIN
DECLARE newest_id INT(11);
INSERT INTO `test_db`.`users`
(`id`,`user_name`,`password`)
VALUES (user_id, u_name, pass);
SELECT LAST_INSERT_ID() INTO newest_id FROM test_db.users LIMIT 1;
RETURN newest_id;
END $$
DELIMITER ;
然后在PHP中的select查询中添加别名 "newest_id"
。
$sp = "select test_db.set_user(1, 'uname', 'pass123') as newest_id";
$res = $con->multi_query( $sp );
if( $res ) {
$results = 0;
if ($result = $con->store_result()) {
printf( "<b>Result #%u</b>:<br/>", ++$results );
while( $row = $result->fetch_assoc() ) {
echo $row["newest_id"];
}
$result->close();
}
}
我希望它会对你有帮助。