这点你可以放心使用,数据库会给你做好并发处理。这个函数实际是调用MySQL内部的函数来实现的。MySQL会给你处理好的。

解决方案 »

  1.   

    你可以查看下MySQL的LAST_INSERT_ID()的介绍
    mysql_insert_id()就是调用LAST_INSERT_ID()来实现的。
      

  2.   

    应该不会有这种情况的,你可以作个测试程序试试:------a.php-------
    <?php
    $link = mysql_connect('localhost', 'root', '') or die('mysql database connect error');
    mysql_select_db('lyb') or die('the selected database is not exist');
    $sql = "insert lyb (caption) values('aaaa')";
    mysql_query($sql);
    sleep(10);
    echo mysql_insert_id();
    die();
    ?>
    ------b.php-------
    <?php
    $link = mysql_connect('localhost', 'root', '') or die('mysql database connect error');
    mysql_select_db('lyb') or die('the selected database is not exist');
    $sql = "insert lyb (caption) values('bbbb')";
    mysql_query($sql);
    echo mysql_insert_id();
    die();
    ?>先运行a.php,马上在同时运行b.php,
    a.php在mysql_query执行后等待10秒钟然后再取出mysql_insert_id,
    b.php在mysql_query执行后立刻取出mysql_insert_id,这样b.php的query实在a.php执行后执行的。执行的输出结果是a.php的小于b.php的。所有不会出现你说的那种情况
      

  3.   

    应该这样说才对,每个mysql_insert_id()取到的值是“mysql数据苦当前线程的最后插入操作的id,与其它的线程(其它用户的)的无关”
      

  4.   

    其实我也按hahawen(变态的大龄青年) 那样说的理解。但是我看使用pcconnect的时候,是不是数据库发现如果有当前连接线程的,就使用当前线程。不在进行新的连接。那么这样会出问题么?请hahawen(变态的大龄青年) 回答。谢谢。
      

  5.   

    看php手册。里面的(章 21. 数据库永久连接)
    每个永久连接都有子过程的子过程,web是通过子过程来连接数据库的,子过程是唯一的。