为了账号安全,请及时绑定邮箱和手机立即绑定

最后插入值始终返回零

最后插入值始终返回零

PHP
炎炎设计 2021-04-28 13:17:40
尝试使用准备好的语句获取最后一个插入的ID。mysqli_insert_id始终返回零。$sql = "INSERT INTO classes (id_course, id_organization, start_date, end_date, status, id_creator, assign_interval) VALUES (?, ?, ?, ?, ?, ?, 'monthly')";if ($stmt = mysqli_prepare($link, $sql)) {    if (!mysqli_stmt_bind_param($stmt, "ssssss", $course, $idOrg, $thisClass["startDate"], $endDate, $thisClass["status"], $idUser)) {        echo "Error:could not bind parameters";    }    # CODE MISSING...    {        mysqli_stmt_execute($stmt);        $idClass = mysqli_insert_id($stmt);    }} else {    echo 'ERROR: Could not prepare statement';}$sql = "INSERT INTO class_modules (id_class, id_module) select ?,id_module from modules m where m.id_course = ?";if ($stmt = mysqli_prepare($link, $sql)) {    if (!mysqli_stmt_bind_param($stmt, "ss", $idClass, $course)) {        echo "Error:could not bind parameters";    }    if (!mysqli_stmt_execute($stmt)) {        echo "Error: could not update class modules:";    }} else {    echo 'ERROR: Could not prepare statement';}
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我坚定地建议使用面向对象的方法。这样做的原因是您已经混淆了两个函数混合使用的参数。如果您使用OOP,则不太可能发生此错误。


有四种方法可以从MySQLi准备好的语句中获取自动生成的ID:


var_dump($stmt->insert_id);

var_dump($mysqli->insert_id);

var_dump(mysqli_stmt_insert_id($stmt));

var_dump(mysqli_insert_id($mysqli));

如您所见,前两个更清晰,更容易理解和发现错误。您所做的是混淆了最后两个。您曾经使用过,mysqli_insert_id()但是您将语句作为参数传递了。更改函数名称或改为传递mysqli对象。最好的选择是使用OOP并获取属性值。


查看完整回答
反对 回复 2021-05-07
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信