我使用$id = mysqli_insert_id($connection);
来获取最后插入的ID,但如果它更新了表中的任何记录,则会返回0
作为最后插入的ID。
有没有办法解决这个问题?
我想在每次插入或更新天气时获取ID。
由于
修改
我需要将此ID用于将数据插入table2
id from tab1
将数据放入tab2
,其中id
tab1
为FK
最重要的是,我没有将update
与where 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}}数据
答案 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。