【问题标题】:How to get the single return value from mysql stored function in php如何从php中的mysql存储函数获取单个返回值
【发布时间】:2018-03-26 06:24:35
【问题描述】:

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

【问题讨论】:

  • 回显 mysqli_insert_id($con);
  • 不通过存储过程,只需使用mysqli_insert_id($con) 获取最后插入的id。非常简单的原生功能
  • 你还说:- the function is successfully inserts the data -> 哪个函数?我在你的代码中看不到任何函数。2.我也看不到任何数据插入代码。
  • @AlivetoDie 这个函数 test_db.set_user(1, 'uname', 'pass123') 谢谢
  • 你为什么使用multi_query() 进行单个查询?

标签: php mysql


【解决方案1】:

您没有将别名 newest_id 分配给您的 SELECT 的结果:

$sp = "select test_db.set_user(1, 'uname', 'pass123') AS newest_id";

过程中的变量在其外部是不可见的,并且不会成为SELECT返回的列的名称。

【讨论】:

    【解决方案2】:

    我已经检查了你的功能,一切都很好,但需要进行一些更改才能完美运行,所以请检查以下几点:-
    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 查询中添加 alias "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(); } }

      希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 2011-08-27
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2011-04-07
      相关资源
      最近更新 更多