首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL SQL_INSERT_ID()和LAST_INSERT_ID不工作

问MySQL SQL_INSERT_ID()和LAST_INSERT_ID不工作
EN

Stack Overflow用户
提问于 2018-04-09 03:21:06
回答 1查看 420关注 0票数 0

我在最近的一个MacBook Pro上使用MySQL/PHP/Apache,其中包含了所有本地主机的请求。我已经找过了,但找不到解决问题的办法。

我的PHP脚本成功地将一个记录插入到一个基本主表中,该表的主键名为ID,是一个自动增量字段,但当我尝试使用LAST_INSERT_ID()或SQL_INSERT_ID()时,它无法捕获该ID的值,以便与另一个插入一起使用。第二个表所需的数据只需要该值和来自同一个HTML表单的文本字段的内容。

毫无疑问,如果我在等号后面放置一个整数(作为测试),我的脚本工作得完美无缺(即没有错误,脚本完美地将所需的数据输入到第二个表中)。我尝试了SQL_INSERT_ID()和LAST_INSERT_ID(),结果是相同的:一个完全白色的屏幕。

没有外键约束或任何复杂的东西。此代码失败,只返回一个白色屏幕:

代码语言:javascript
复制
$sql = "INSERT INTO Table1 
    (int1, str1, int2, int3, int4, int5) 
    VALUES (?, ?, ?, ?, ?, ?)";

if($stmt = mysqli_prepare($link, $sql)){
    mysqli_stmt_bind_param($stmt, "isiiii", 
        $param_int1, $param_str1, $param_int2, 
        $param_int3, $param_int4, $param_int5);
}

if(mysqli_stmt_execute($stmt)){
    $last_id = sql_insert_id();        // <--- problem statement
} else {
    echo "Something went wrong with the execution.";
}

但是,当我使用一个整数来代替所讨论的函数时,代码就像我想要的那样工作:

代码语言:javascript
复制
if(mysqli_stmt_execute($stmt)){
    $last_id = 6;
} else {
    echo "Something went wrong with the execution.";
}

如果第一个插入成功,则if(mysql_stmt_execute($stmt))返回true,因此在此之后初始化变量$last_id似乎是合乎逻辑的。这样可以吗?我还能在哪里查看我的代码?我是否需要在函数的括号内提供数据?

MySQL版本为5.7.21 Mac版本10.13.4

我认为自己是PHP/MySQL的高级初学者。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-09 03:23:52

试一试

代码语言:javascript
复制
mysqli_insert_id($link);

我认为您混淆了OOP和库的过程部分或其他什么。

因为如果我记得正确的话,sql_insert_id是从现在已经失效的mysql_*库中提取的。

id.asp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49725065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档