【问题标题】:MySQL SQL_INSERT_ID() and LAST_INSERT_ID do not workMySQL SQL_INSERT_ID() 和 LAST_INSERT_ID 不起作用
【发布时间】:2018-04-09 03:21:06
【问题描述】:

我在最近的 MacBook Pro 上使用 MySQL/PHP/Apache,所有请求都发送到 localhost。我已经搜索但找不到我的问题的解决方案。

我的 PHP 脚本成功地将一条记录插入到一​​个基本主表中,该表的主键名为 ID 并且是一个自动增量字段,但它无法捕获该 ID 的值以与另一个 INSERT 一起使用到另一个表中,当我尝试使用 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 的高级初学者。任何帮助将不胜感激。

【问题讨论】:

  • PHP本身没有sql_insert_id()函数,你用的是框架吗?

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


【解决方案1】:

试试

mysqli_insert_id($link);

我认为您混淆了 OOP 和库的程序部分或其他内容。

因为如果我没记错的话,sql_insert_id 来自现已失效的mysql_* 库。

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

【讨论】:

  • 是的!非常感谢。现在可以了。我可以发誓我试过了,但我注意到我也写下了 sql_ 而不是 mysqli_。不过,我在抄写。
  • 当然,这很容易做到。
猜你喜欢
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2010-10-26
  • 2011-04-19
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
相关资源
最近更新 更多