我处于需要在查询中插入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);
我在试图复制Frank的答案时遇到了问题。正确的做法是:
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->lastInsertId();