【发布时间】: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