Php 基于自动递增的用户ID创建用户目录

Php 基于自动递增的用户ID创建用户目录,php,mysqli,mkdir,Php,Mysqli,Mkdir,我正在尝试创建一个用户目录,其名称等于用户的“id”,该id是数据库中的一个自动递增列。稍后将用于存储供用户访问的文本文件。但是,每次运行此命令时,我都会收到一个错误,因为$row为null 对于上下文,此代码将在用户插入数据库后立即运行 我已尝试检查$conn是否有效,以及$username是否正确。但是,当我在现有用户上运行createUserDir时,一切正常 创建用户的代码(工作正常,但我想显示函数调用的位置): 创建用户目录: function createUserDir($conn,

我正在尝试创建一个用户目录,其名称等于用户的“id”,该id是数据库中的一个自动递增列。稍后将用于存储供用户访问的文本文件。但是,每次运行此命令时,我都会收到一个错误,因为$row为null

对于上下文,此代码将在用户插入数据库后立即运行

我已尝试检查$conn是否有效,以及$username是否正确。但是,当我在现有用户上运行createUserDir时,一切正常

创建用户的代码(工作正常,但我想显示函数调用的位置):

创建用户目录:

function createUserDir($conn, $username) {
    $sql = "SELECT id FROM users WHERE username = ?;";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        header("location: ../register.php?error=stmtfailure");
        exit();   
    }

    mysqli_stmt_bind_param($stmt, "s", $username);
    mysqli_stmt_execute($stmt);

    $stmtResult = mysqli_stmt_get_result($stmt);
    $row = mysqli_fetch_assoc($stmtResult);
    
    $uid = $row['id'];
    mysqli_stmt_close($stmt);
    if(mkdir("../data/users/$uid")) {
        die('Failed to create user directory.');
    }
}

创建记录时,a在列中添加一些文本,如“NA”,这样它就不会返回错误,以后也不会使用$last\u id=$conn->insert\u id更新last中的值;
听起来可能很傻,但可能会有用

一种更简单的方法是在createUser函数$stmt->insert_ID中检索新创建的用户ID,并将其传递给CreateUserDir。这样,您就不需要向DB发送另一个查询,而是使用您的ID创建目录
function createUserDir($conn, $username) {
    $sql = "SELECT id FROM users WHERE username = ?;";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        header("location: ../register.php?error=stmtfailure");
        exit();   
    }

    mysqli_stmt_bind_param($stmt, "s", $username);
    mysqli_stmt_execute($stmt);

    $stmtResult = mysqli_stmt_get_result($stmt);
    $row = mysqli_fetch_assoc($stmtResult);
    
    $uid = $row['id'];
    mysqli_stmt_close($stmt);
    if(mkdir("../data/users/$uid")) {
        die('Failed to create user directory.');
    }
}