上次插入ID问题 - 如何获取它

时间:2014-11-04 10:56:37

标签: php mysqli

我使用$id = mysqli_insert_id($connection);来获取最后插入的ID,但如果它更新了表中的任何记录,则会返回0作为最后插入的ID。

有没有办法解决这个问题?

我想在每次插入或更新天气时获取ID。

由于

修改

我需要将此ID用于将数据插入table2

id from tab1 将数据放入tab2,其中id tab1FK

最重要的是,我没有将updatewhere clause

一起使用

以下是我使用

code
  $val  = utf8_encode($val);
        mysqli_set_charset($connection, 'utf8');
        mysqli_query($connection, "SET NAMES 'utf8'");
        mysqli_query($connection, "SET FOREIGN_KEY_CHECKS = 0;");
        $sql = "INSERT INTO leaks($insert) VALUES($val)";

        $sql .= " ON DUPLICATE KEY UPDATE `url` = '".mysqli_real_escape_string($connection,$data['url'])."';";
        mysqli_query($connection, ($sql))or die(mysqli_error($connection)."<br />".print($sql));
        $id = mysqli_insert_id($connection);
        $proofs['leaks_id'] = $id;
        mysqli_query($connection, "SET FOREIGN_KEY_CHECKS = 0;");
        print_r($id);
        $this->insertProofs($connection, $proofs);
        connection::close_connection($connection);

请在$this->insertProofs($connection, $proofs);传递给inserts的基础上记下table2 key个{{1}}数据

1 个答案:

答案 0 :(得分:2)

INSERT

执行INSERT查询后,使用mysqli_insert_id()绝对没问题。

UPDATE

根据您的更新,您;

  • 会知道id您正在更新
  • 了解从更新中搜索id的条件。

例如,如果您的UPDATE类似于

UPDATE `foo` SET `x`='y' WHERE `a`='b'

然后您可以运行

SELECT `id` FROM `foo` WHERE `a`='b'

获取更新的ID。

修改

我看到您正在使用ON DUPLICATE KEY UPDATE

您可以修改您的查询(假设id是主要的auto_increment键)

ON DUPLICATE KEY UPDATE 
       `url` = '".mysqli_real_escape_string($connection,$data['url'])."', 
       id = LAST_INSERT_ID(id)

然后,无论是UPDATE还是INSERT

,您都可以使用mysqli_insert_id()

例如,如果我运行(记录id=2存在;那么我们就会update);

INSERT INTO foobar (id, foo) VALUES (2, 'bar') ON DUPLICATE KEY UPDATE foo = 'baz', id = LAST_INSERT_ID(id);
SELECT LAST_INSERT_ID();

输出为2,因为那是最后一个插入ID。