使用多列主键插入MySQL表后如何获取最后插入的ID

萨朱什科

我有这张桌子:

CREATE TABLE `test` (
  `Id1` int(11) unsigned NOT NULL,
  `Id2` int(11) unsigned NOT NULL,
  `Id3` int(11) unsigned NOT NULL,
  `Id4` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) NOT NULL,
  PRIMARY KEY (`Id1`,`Id2`,`Id3`,`Id4`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

INSERT INTO `test` (`Id1`, `Id2`, `Id3`, `Name`) VALUES (1, 1, 1, 'test')
INSERT INTO `test` (`Id1`, `Id2`, `Id3`, `Name`) VALUES (1, 1, 1, 'test2')
INSERT INTO `test` (`Id1`, `Id2`, `Id3`, `Name`) VALUES (1, 2, 1, 'test')
INSERT INTO `test` (`Id1`, `Id2`, `Id3`, `Name`) VALUES (1, 2, 1, 'test2')

创建表后,日期如下所示:

Id1   Id2   Id3   Id4   Name

1     1     1     1     test
1     1     1     2     test2
1     2     1     1     test
1     2     1     2     test2

Id4正在按预期递增,但是我无法使用PHP mysqli插入Id4。这是我正在使用的代码:

$db = new mysqli('host', 'user', 'pass', 'db');
$db->query("INSERT INTO `test` (`Id1`, `Id2`, `Id3`, `Name`) VALUES (1, 1, 1, 'test')");
var_dump($db->insert_id);

我得到结果

int(0)

结果应该是,int(1)但我无缘无故得到零​​。有任何想法吗?

Poiz

从本质上讲,您的代码应该可以正常工作……在测试时可以正常工作……换句话说,请检查是否还有其他情况……按现状,您的代码还可以....并且应该可以正常工作。但是,作为替代解决方法,您可能需要将MySql LAST_INSERT_ID()函数包装在自己的函数中,然后在需要获取最后插入ID时调用该函数。

    <?php 

    // WILL RETURN THE ID OF THE AUTO-INCREMENTED FIELD ONLY
    function getLastInsertID($db, $tbl='test'){
        $result = null;
        $sql    = $db->prepare("SELECT LAST_INSERT_ID() FROM `". $tbl ."`");
        $sql->execute();
        $sql->bind_result($result);
        $sql->fetch();
        return $result;
    }
    var_dump(getLastInsertID($db));

也许它对您有用。

参考:http : //dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章