php MySQLi:如何使用预处理语句插入多个表[重复]

qmelpv7a  于 2023-05-16  发布在  PHP
关注(0)|答案(1)|浏览(105)

此问题已在此处有答案

How to run multiple insert query in SQL using PHP in one go?(2个答案)
4天前关闭。
我在一个情况下,我需要插入到2表中的查询。我在网上找了一圈,找不到解决办法。我想做的是在user表中插入值并同时在profile中插入值。我可以一个接一个地做**,但我读到过这样的方法效率不高,而且被认为是糟糕的编码技术。
当前代码:

$statement = $db->prepare("
    BEGIN;
    INSERT INTO `user`(`username`, `email`, `password_hashed`, `fname`, `lname`, `dob`, `agreement`, `gender`, `access_token`)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
    INSERT INTO `profile_picture`(`owner`) VALUES (LAST_INSERT_ID());
    COMMIT;
");
if($statement) {
    $statement->bind_param("ssssssiss", $username, $email, $hashedPassword, $fname, $lname, $dob, $agreement, $gender, $access_token);
    $statement->execute();
    $statement->close();

    echo "DONE";
    exit();
}
else printf("Error: %s.\n", $db->error);
xxslljrj

xxslljrj1#

我有这个问题试图复制像弗兰克的答案。正确的做法是:

try {
    $db->begin_transaction();
  
    $stmt = $db->prepare("INSERT INTO `user`(`username`, `email`, `password_hashed`, `fname`, `lname`, `dob`, `agreement`, `gender`, `access_token`)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("ssssssiss", $username, $email, $hashedPassword, $fname, $lname, $dob, $agreement, $gender, $access_token);
    $stmt->execute();

    $stmt = $db->prepare("ANOTHER QUERY");
    $stmt->bind_param(...)
    $stmt->execute();

    $db->commit();
} catch(mysqli_sql_exception $ex) {
    //Something went wrong rollback!
    $db->rollback();
    throw $ex->getMessage();
}

在执行第一条语句后,您可以使用以下命令从PHP获得对insertID的访问:$last_id = $db-> lastInsert();

相关问题