0

我想获得最后一个受影响的表名(插入后)。

我试过了,mysql_insert_id()但我只有id. 我也想要表名。

谁能给我关于我的问题的想法

4

4 回答 4

1

这是一个伸展...但如果:

  • 你正在运行 mysql 5.6.3 +
  • 您仍然可以访问插入查询(假设它是 $query)
  • 你确定这是一个插入查询(因为,嘿,你知道你想要last_insert_*,不是吗?)

你可以试试:

$row = mysql_fetch_assoc(mysql_query("explain $query"));
$table = $row['table'];

从 mysql 5.6.3+ 开始,您可以结合explain查询insert into。我认为这应该只返回 1 行。我自己没有 mysql 5.6.3+ 来测试它。

于 2013-04-11T13:42:44.867 回答
0

您在评论中提到您正在使用一个通用函数来应用更改,从而阻止您“知道”您插入的最后一个表是什么。

如果是这样的话:你的逻辑是有缺陷的

MySQL 不会告诉你最后一个表是在哪个表中插入的。你必须在你的函数中编写一个钩子,你最后知道你要更新哪个表。无论您使用什么函数,都必须在执行插入之前指定一个表名。您此时存储表名。

您可以通过多种方式做到这一点,具体取决于您的需要:

  1. 将其存储在 mysql 表中(例如,last_updated_table 只有 1 列)
  2. 将它存储在一个变量中(如果你只需要它在同一个请求中)
  3. 将其存储在会话中(我不会选择这个)
于 2013-04-11T13:06:55.257 回答
0

information_schema如果你有一个数据库,你可以使用:

SELECT TABLE_SCHEMA, TABLE_NAME, UPDATE_TIME 
FROM TABLES
ORDER BY UPDATE_TIME DESC 
LIMIT 0,1

在查询后使用它,您将获得受影响的表。

于 2013-04-11T13:08:01.850 回答
0

您可以覆盖本文mysql_query中定义的函数,将上次调用表名称保存在全局变量或会话中,并为最后调用的插入完成祈祷。

// THIS JUST SAMPLE... use code from link below ^
function custom_mysql_query($query){
    if(strstr('INSERT',$query)){
        /*GET YOUR TABLE NAME WITH REGEX*/
    }

    basic_mysql_query($query);
}

这对我来说是非常非常非常糟糕的解决方案。但理论上会起作用。

于 2013-04-11T13:11:40.813 回答