如何从php中获取mysql存储函数的单个返回值

时间:2018-03-26 06:24:36

标签: php mysql

我想使用以下函数返回最后插入的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没有得到单个返回值。请帮忙。

2 个答案:

答案 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 ;
  1. 然后在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(); } }

    我希望它会对你有帮助。