Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取php中最后一个受影响的表_Php_Mysql - Fatal编程技术网

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

如何获取php中最后一个受影响的表,php,mysql,Php,Mysql,我想获取最后一个受影响的表名(在insert之后) 我试过使用mysql\u insert\u id(),但只得到了id。 我还想要表名 您在评论中提到,您正在使用一个公共函数来应用更改,从而使您无法“知道”插入的最后一个表是什么 如果是这样:您的逻辑有缺陷 MySQL不会告诉你它插入的最后一个表是什么。您必须在函数中编写一个钩子,以便最后知道要更新的表。无论使用什么函数,都必须在执行insert之前的某个时刻指定表名。在该点存储表名 根据您的需要,您可以通过多种方式实现: 将其存储在mysql

我想获取最后一个受影响的表名(在insert之后)

我试过使用
mysql\u insert\u id()
,但只得到了
id
。 我还想要表名


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

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

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

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

  • 将其存储在mysql表中(上次更新的表只有1列, (例如)
  • 将其存储在变量中(如果仅在 (同一请求)
  • 将其存储在会话中(我不会选择此选项)

  • 如果您有以下数据库,则可以使用
    信息\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…
    等等。我尝试了选择和更新的逻辑,但我想要插入的逻辑