我想显示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>
答案 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语句的值。