我有这张桌子:
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)
但我无缘无故得到零。有任何想法吗?
从本质上讲,您的代码应该可以正常工作……在测试时可以正常工作……换句话说,请检查是否还有其他情况……按现状,您的代码还可以....并且应该可以正常工作。但是,作为替代解决方法,您可能需要将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] 删除。
我来说两句