如何获取php中最后一个受影响的表
我想获取最后一个受影响的表名(在insert之后) 我试过使用如何获取php中最后一个受影响的表,php,mysql,Php,Mysql,我想获取最后一个受影响的表名(在insert之后) 我试过使用mysql\u insert\u id(),但只得到了id。 我还想要表名 您在评论中提到,您正在使用一个公共函数来应用更改,从而使您无法“知道”插入的最后一个表是什么 如果是这样:您的逻辑有缺陷 MySQL不会告诉你它插入的最后一个表是什么。您必须在函数中编写一个钩子,以便最后知道要更新的表。无论使用什么函数,都必须在执行insert之前的某个时刻指定表名。在该点存储表名 根据您的需要,您可以通过多种方式实现: 将其存储在mysql
mysql\u insert\u id()
,但只得到了id
。
我还想要表名
您在评论中提到,您正在使用一个公共函数来应用更改,从而使您无法“知道”插入的最后一个表是什么 如果是这样:您的逻辑有缺陷 MySQL不会告诉你它插入的最后一个表是什么。您必须在函数中编写一个钩子,以便最后知道要更新的表。无论使用什么函数,都必须在执行insert之前的某个时刻指定表名。在该点存储表名 根据您的需要,您可以通过多种方式实现:
如果您有以下数据库,则可以使用
信息\u模式
数据库:
SELECT TABLE_SCHEMA, TABLE_NAME, UPDATE_TIME
FROM TABLES
ORDER BY UPDATE_TIME DESC
LIMIT 0,1
在查询后使用此选项,您将得到受影响的表。您可以覆盖中定义的
mysql\u query
函数,将上次调用的表名保存在全局变量或会话中,并祈祷最后调用的insert finish last
// 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);
}
这对我来说是非常糟糕的解决方案。但从理论上讲是可行的。这是一个挑战。。。但如果:
- 您正在运行mysql 5.6.3+
- 您仍然可以访问insert查询(假设它是$query)
- 您确定这是一个插入查询(因为,嘿,您知道您想要最后一次插入,不是吗?)
$row = mysql_fetch_assoc(mysql_query("explain $query"));
$table = $row['table'];
从mysql 5.6.3+中,您可以将explain
与insert组合到
查询中。
我想这应该只返回1行。
我自己没有mysql 5.6.3+来测试它。相当简单:当你做
插入时,记住表名;-)上一条insert语句可能影响了多个表。所以我认为这是不可能的。编辑:等一下。我现在怀疑。我不认为您可以在多个表中插入:s。不过,您可以更新多个表。所以谁知道。。可能吧。你不能在一个查询中插入多个表。但是,您可以使用事务,甚至是存储过程来完成。我必须在公共函数中进行更改。所以没有办法在那里找到表名,我把问题贴在这里,我不想插入多个数据。最重要的是我想知道最近受影响的表名(Insert),这在他的情况下是不可靠的。这可能会返回在不同线程中运行的不同查询的不同表。所以我同意这是不可靠的,因为你不能在MySQL本身内做到这一点。您必须将您的逻辑调整到PHP代码中,以将表名保留在变量或其他内容中。SELECT*FROM random\u table,其中random\u字段(如“%INSERT%”)将中断itOP始终可以添加更多的检查<代码>…&&!strstr('SELECT…
等等。我尝试了选择和更新的逻辑,但我想要插入的逻辑