MySQL SQL_INSERT_ID()和LAST_INSERT_ID不起作用

时间:2018-04-09 03:21:06

标签: php mysql mysqli last-insert-id mysql-insert-id

我在最近的MacBook Pro上使用MySQL / PHP / Apache,并向localhost发出所有请求。我搜索过但无法找到解决问题的方法。

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

如果我在等号之后放置一个整数(作为测试),我的脚本可以完美地工作(即没有错误,并且脚本完美地将所需数据输入到第二个表中),这是明白无误的。我尝试了SQL_INSERT_ID()和LAST_INSERT_ID(),结果相同:一个完全白屏。

没有外键约束或任何复杂的事情。此代码失败并返回一个白色屏幕:

$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.";
}

但是当我使用整数代替有问题的函数时,代码完全按照我的要求运行:

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 OS X版本10.13.4

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

1 个答案:

答案 0 :(得分:0)

尝试

mysqli_insert_id($link);

我认为你混淆了OOP和库的程序部分或其他东西。

因为如果我记得正确sql_insert_id来自现已解散的mysql_*库。

https://www.w3schools.com/php/func_mysqli_insert_id.asp