猿问

最后插入值始终返回零

尝试使用准备好的语句获取最后一个插入的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';

}


炎炎设计
浏览 124回答 1
1回答

拉莫斯之舞

我坚定地建议使用面向对象的方法。这样做的原因是您已经混淆了两个函数混合使用的参数。如果您使用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并获取属性值。
随时随地看视频慕课网APP
我要回答