|
近期需要将论坛以及Ucenter会员整合第三方的会员中心,届时Ucenter也将作为一个从库进行操作,因此对于用户相关的数据表以及相关SQL进行了一次确认和操作,发现insert_id方法存在返回不正确的可能性,但这个前提是mysql_insert_id()函数未能返回正确的结果且针对AUTO_INCREMENT值进行了设置,而不是由MySQL自行决定的自增。当然,这个出现的几率微乎其微,几乎为0.此处仅仅是考虑可能性而已,有点危言耸听了,呵呵。
废话不错说,测试数据库结构为:- CREATE TABLE `testid` (
- `id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(50) CHARACTER SET gbk DEFAULT '',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
复制代码 测试php脚本- <?php
- $link = mysql_connect('localhost', 'root', '');
- if (!$link) {
- die('Could not connect: ' . mysql_error());
- }
- mysql_query("INSERT INTO test.testid (id, name) VALUES (0, 'names')", $link);
- echo '~~~~'.mysql_insert_id($link).'~~~~';
- print_r(mysql_fetch_array(mysql_query("SELECT last_insert_id();")));
- echo "
- ";
- mysql_query("INSERT INTO test.testid (id, name) VALUES (10, 'names200')", $link);
- echo '<<<<<'.mysql_insert_id($link).'>>>>';
- print_r(mysql_fetch_array(mysql_query("SELECT last_insert_id();")));
- echo "
- ";
- mysql_close($link);
- exit();
- ?>
复制代码 测试结果:- ~~~~1~~~~Array
- (
- [0] => 1
- [last_insert_id()] => 1
- )
- <<<<<10>>>>Array
- (
- [0] => 1
- [last_insert_id()] => 1
- )
复制代码 由以上可以看出,第二次的执行未能返回当前的insert_id,而是返回了上一次插入的值 1,不是10.
|
|