我如何在php中获取最后一个受影响的表

时间:2013-04-11 12:51:28

标签: php mysql

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

我尝试使用mysql_insert_id(),但我只获得了id。 我也想要表名。

任何人都可以向我提出我的问题的想法

4 个答案:

答案 0 :(得分:0)

您在评论中提到您正在使用常用功能来应用更改,从而阻止您“了解”您插入的最后一个表格。

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

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

根据您的需要,您可以通过多种方式实现这一目标:

  1. 将其存储在mysql表中(last_updated_table只有1列, 例如)
  2. 将其存储在变量中(如果您只需要它 同样的要求)
  3. 将它存储在一个会话中(我不会选择这个)

答案 1 :(得分:0)

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

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

在查询后使用此选项,您将获得受影响的表格。

答案 2 :(得分:0)

您可以覆盖this post中定义的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);
}

这对我来说是非常非常糟糕的解决方案。但理论上可行。

答案 3 :(得分:0)

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

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

您可以尝试:

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

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