暖冬的源码分享

 找回密码
 立即加入

QQ登录

只需一步,快速开始

搜索
热搜: 巧借
查看: 5063|回复: 0

MySQL类中insert_id方法存在返回不正确的可能性[危言耸听版]

[复制链接]
发表于 2012-5-23 17:34:33 | 显示全部楼层 |阅读模式
近期需要将论坛以及Ucenter会员整合第三方的会员中心,届时Ucenter也将作为一个从库进行操作,因此对于用户相关的数据表以及相关SQL进行了一次确认和操作,发现insert_id方法存在返回不正确的可能性,但这个前提是mysql_insert_id()函数未能返回正确的结果且针对AUTO_INCREMENT值进行了设置,而不是由MySQL自行决定的自增。当然,这个出现的几率微乎其微,几乎为0.此处仅仅是考虑可能性而已,有点危言耸听了,呵呵。

废话不错说,测试数据库结构为:
  1. CREATE TABLE `testid` (
  2.   `id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) CHARACTER SET gbk DEFAULT '',
  4.   PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
复制代码
测试php脚本
  1. <?php

  2. $link = mysql_connect('localhost', 'root', '');
  3. if (!$link) {
  4.     die('Could not connect: ' . mysql_error());
  5. }

  6. mysql_query("INSERT INTO test.testid (id, name) VALUES (0, 'names')", $link);

  7. echo '~~~~'.mysql_insert_id($link).'~~~~';
  8. print_r(mysql_fetch_array(mysql_query("SELECT last_insert_id();")));
  9. echo "
  10. ";

  11. mysql_query("INSERT INTO test.testid (id, name) VALUES (10, 'names200')", $link);

  12. echo '<<<<<'.mysql_insert_id($link).'>>>>';
  13. print_r(mysql_fetch_array(mysql_query("SELECT last_insert_id();")));
  14. echo "
  15. ";
  16. mysql_close($link);
  17. exit();
  18. ?>
复制代码
测试结果:
  1. ~~~~1~~~~Array
  2. (
  3.     [0] => 1
  4.     [last_insert_id()] => 1
  5. )

  6. <<<<<10>>>>Array
  7. (
  8.     [0] => 1
  9.     [last_insert_id()] => 1
  10. )

复制代码
由以上可以看出,第二次的执行未能返回当前的insert_id,而是返回了上一次插入的值 1,不是10.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

手机版|小黑屋|享码网 ( 京ICP备12003721号 )

GMT+8, 2024-3-28 20:25

Powered by Discuz! X3.5

Copyright © 2001-2021 Tencent Cloud.

快速回复 返回顶部 返回列表