SELECT LAST_INSERT_ID() *更新

Posted

技术标签:

【中文标题】SELECT LAST_INSERT_ID() *更新【英文标题】:SELECT LAST_INSERT_ID() *updated 【发布时间】:2011-01-13 00:23:36 【问题描述】:

我希望使用 SELECT LAST_INSERT_ID() 我正在使用表单来让用户输入值。在第一次插入时,我需要为下一次插入获取最后插入的 id...我还没有弄清楚如何获取最后选择的 id,然后将其传递到我的第二个插入语句中

我已经更新了我的代码,但我仍然无法将 id 发布到表格中

include("config.inc.php");
$link = mysql_connect($db_host,$db_user,$db_pass);
if(!$link) die ('Could not connect to database: '.mysql_error());
mysql_select_db($db_name,$link);
$query = "INSERT into `".$db_table."` (producer_id,series_id,lang_id,title_name,title_public_access) VALUES ('" . $_POST['producer_id'] . "','" . $_POST['series_id'] . "','" . $_POST['lang_id'] . "','" . $_POST['title_name'] . "','" . $_POST['title_public_access'] . "')";

$last_id = mysql_insert_id();

$query = "INSERT into `".$db_table2."` (seg_id, file_video_UNC,file_video_URL) VALUES ('" . '$last_id' . "','" . $_POST['file_video_UNC'] . "','" . $_POST['file_video_URL'] . "')";

mysql_query($query);
mysql_close($link);

【问题讨论】:

不确定这个“问题”有多合适......看看你的最后一个问题,我建议在找人拼凑之前先在网上查看一些基本的 MySQL/PHP 教程给你的东西。 或者买一本像样的书。您只能通过在线“tuts”走这么远;通常是在错误的方向。 @Tomalak,我完全不同意。每个人都有自己的学习模式,也许书对你有用,但不是每个人。就像我在网上看到的一样,我在已出版的书中读过很多废话和不准确的地方。 @Brad 我从来没有说过每本书都是无懈可击的。但我也不认为需要天才才能意识到推荐的 PHP 或 MySQL 书籍比某个 13 岁的人在他的博客上发布的教程更值得信赖。 @Tomalak,嗯,也许吧。我看过一些推荐可怕的书,就像你在网上看到很多可怕的教程一样。我还要指出,年龄对这些事情没有影响。我认识几个 50 多岁的人,他们的博客/网站上的教程很糟糕。我们都去过一次,是吗?重要的是鼓励年轻一代,而不是像刚才那样在网上抨击他们。 【参考方案1】:

有一个函数,叫做mysql_insert_id()。

... first query here ...
$last_id = mysql_insert_id();
$sql = "INSERT INTO $db_table SET 
    file_video = " . $_POST['file_video_UNC'].",
    file_video_URL = " . $_POST['file_video_URL'] . ",
    insert_id_of_first_query = $last_id";
...

您更新的代码不会将查询发送到数据库 - 结果没有INSERT,所以没有LAST_INSERT_ID

$query = "INSERT into ".$db_table." 
    (producer_id,series_id,lang_id,title_name,title_public_access) VALUES
    ('" . $_POST['producer_id'] . "','" 
        . $_POST['series_id'] . "','" 
        . $_POST['lang_id'] . "','" . $_POST['title_name'] . "','" 
        . $_POST['title_public_access'] . "')";

mysql_query($query); /* YOU FORGOT THIS PART */
$last_id = mysql_insert_id();

【讨论】:

我已经更新了我的代码,但仍然没有为我提取 id。 更新答案中的代码不会执行查询。您需要先执行mysql_query($query)。我会相应地更新我的答案 我知道这只是一个例子,但是将 $_POST 数据直接推送到您的数据库中......您也可以将您的数据库通过电子邮件发送给那里的每个俄罗斯和中国黑客! (无意冒犯)。 @Dr.Dredel,我完全同意,现在也没有人应该使用myqsl_ 函数,因为它们已被弃用。我只是复制了OP的代码,这样丢失的部分就会清晰可见。【参考方案2】:

您不能在一行 PHP 中将查询单独转储到字符串中。您应该在第二个查询中使用 LAST_INSERT_ID() ,或者更好的是使用 PHP's mysql_insert_id() 函数,它会在 API 中为您包装它。

【讨论】:

您想在投反对票的同时发表评论吗?我推荐了与 +1 答案相同的内容,并提供 (a) 原始方法失败的原因,以及 (b) 第二种替代方法。 根据票数,没有人反对这个答案。 0/0 @Brad 情况在 13 小时前肯定发生了变化。 :) 答案是“-1”。【参考方案3】:

行内:

$query = "INSERT into `".$db_table2."` (seg_id, file_video_UNC,file_video_URL) VALUES ('" . '$last_id' . "','" . $_POST['file_video_UNC'] . "','" . $_POST['file_video_URL'] . "')";

我认为VALUES ('" . '$last_id' . "', 应该只是VALUES ('" . $last_id . "',,变量周围没有单引号。

【讨论】:

以上是关于SELECT LAST_INSERT_ID() *更新的主要内容,如果未能解决你的问题,请参考以下文章

MySQL LAST_INSERT_ID() 与 INSERT INTO tablea SELECT FROM tableb

select last_insert_id()使用注意事项

SELECT LAST_INSERT_ID() *更新

使用 select last_insert_id 生成唯一 ID

阿里读写分离数据源SELECT LAST_INSERT_ID()获取不到id

在Spring中用select last_insert_id()时遇到问题