簡體   English   中英

如何從php中的mysql存儲函數獲取單個返回值

[英]How to get the single return value from mysql stored function in php

我想使用以下函數返回最后插入的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未獲得單個返回值。 請幫忙。

您沒有將別名newest_id分配給SELECT的結果:

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

過程內部的變量在其外部不可見,並且不會成為SELECT返回的列的名稱。

我檢查過您的功能是否很好,但需要進行一些更改才能正常工作,所以請檢查以下幾點:
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的選擇查詢中添加別名 "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(); } }

    希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM