【问题标题】:access LAST_INSERT_ID() from php after calling a stored procedure调用存储过程后从 php 访问 LAST_INSERT_ID()
【发布时间】:2009-03-13 09:10:59
【问题描述】:

我在 mysql 中定义了一个存储过程(我们称之为 proc_create_node(parent INT))进行插入。

当我从 mysql cli 调用它时,执行以下操作就可以了:

CALL proc_create_node(12);
SELECT LAST_INSERT_ID();

我得到最后插入的 id:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|               15 | 
+------------------+

现在,当我从 php 调用这些行时,或者如果我使用 mysql_insert_id() php 函数,我总是会返回 0

我错过了什么?我怎样才能在 php 中获取最后插入的 id?

你的……皮埃尔

【问题讨论】:

    标签: php mysql stored-procedures


    【解决方案1】:

    这可能与数据库连接有关 - LAST_INSERT_ID() 函数不是在每个连接的基础上工作吗?

    您认为将 SELECT LAST_INSERT_ID() 添加到存储过程中并修改存储过程以返回所述 ID 是否是个好主意?

    【讨论】:

      【解决方案2】:

      它在这里工作:

      $link = mysql_connect('localhost', 'root', '');
      if (!$link) {
         die('Not connected : ' . mysql_error());
      }
      
      $db_selected = mysql_select_db('test', $link);
      if (!$db_selected) {
         die ('Can\'t use test : ' . mysql_error());
      }
      $result = mysql_query('CALL blub(12)');
      if (!$result) {
         die('Invalid query: ' . mysql_error());
      }
      $result = mysql_query('SELECT LAST_INSERT_ID()');
      if (!$result) {
         die('Invalid query: ' . mysql_error());
      }
      
      print_r(mysql_fetch_assoc($result));
      

      打印一个递增的整数。 mysql 5.1.30 和 php 5.2.9-1。

      所以问题一定出在您的 php 代码、您的存储过程(您是否从 php 传递有效参数?)或您的 php 或 mysql 版本(恰好有相当多的错误)中。

      顺便说一句:用mysql_insert_id() 替换SELECT LAST_INSERT_ID() 在这里工作。

      【讨论】:

        【解决方案3】:

        在这里查看 mysqli_multy_query 的用法:http://ua.php.net/manual/en/mysqli.multi-query.php

        此函数旨在处理像您这样的多语句查询。但是要使用它,您需要通过 php_mysqli 模块而不是通过 php_mysql 如果您支持旧应用程序,这并不简单。

        第二 - 您可以将 SELECT LAST_INSERT_ID() 放入您的存储过程并在执行结果中接收它。

        这两种方法都值得一试,但第二种方法简单得多,并且适用于 php_mysql。

        【讨论】:

          猜你喜欢
          • 2016-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-21
          • 2016-01-11
          • 1970-01-01
          • 2019-05-11
          相关资源
          最近更新 更多