mysql_insert_id()不起作用

时间:2015-01-24 17:39:37

标签: php mysql

我想显示MySQL行的最后插入数据。但是如果我使用mysql_insert_id()它就不起作用了。但是,如果我使用id='$id,那意味着$sql="SELECT * FROM $table WHERE creator='$creator'";就可以了。但不是在最后一行中选择。如何显示最后插入的数据?

<?php @session_start(); ?>
<?php include "header.php"?>
<?php include "db.php"?>
<?php
                        $table="signup";
                        $creator=$_SESSION["id"];
                        $id = mysql_insert_id();
                        $sql="SELECT * FROM $table WHERE id='$id' AND creator='$creator'";                      
                        $result=mysql_query($sql);
                        $row = mysql_fetch_array($result);

?>


   <p>Name: <?php echo $row['name']; ?></p>
   <p>Email: <?php echo $row['email']; ?></p>
   <p>ID: <h2><span class="star "><?php echo $row['id']; ?></span></h2></p>

2 个答案:

答案 0 :(得分:3)

mysql_insert_id是基于每个连接计算的。

PHP手册没有说明这一点,但是您间接使用MySQL API并且the MySQL documentation for mysql_insert_id非常清楚:

  

mysql_insert_id()的值仅受当前客户端连接中发出的语句的影响。它不受其他客户发布的声明的影响。

此功能可以防止您在一个脚本实例中INSERT而其他人INSERT在另一个脚本实例中同时出现的竞争条件,并且您不会知道从{{1}获取的内容1}}。 (reference

但是,这也意味着您不能在脚本中运行它而不执行last_insert_id。实际上,当插入该行的 时,实际上无法使用此技术获取最后插入行的ID。从PHP和MySQL的角度来看,你是上次运行脚本的人的另一个人!

据我所知,在这种情况下,您可以做的最好的事情是执行INSERT以查找现有数据中的最高ID,并希望这是您想要的。或者,执行SELECT 的代码中的,将INSERT的结果存储在会话变量中并在此处使用。

如果没有被告知你实际上想要做什么,我无法提出更多建议。

答案 1 :(得分:-2)

正确使用mysql_insert_id(使用问题中的详细信息)是:

      $sql="INSERT INTO ".$table." (creator)  VALUES ('$creator')"; 
    mysql_query($sql);
    $id = mysql_insert_id();

$ id返回最后一个insert语句的值。