我处于需要在查询中插入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);
答案 0 :(得分:0)
我试图复制像弗兰克这样的答案时遇到了问题。正确的方法是:
<?php
try {
$db->beginTransaction();
$stmt = $db->prepare("QUERY");
$stmt->execute();
$stmt = $db->prepare("ANOTHER QUERY??");
$stmt->execute();
$db->commit();
}
catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}
执行第一个语句后,您可以使用以下命令从PHP访问insertID:$ last_id = $ db-&gt; lastInsertId();
希望这有帮助!
答案 1 :(得分:-1)
也许这个可以帮到你:MySQL Insert into multiple tables?
我认为您需要这样的声明:
BEGIN;
INSERT INTO user(column_a,column_b) VALUES('value_a','value b');
INSERT INTO profile(column_x,column_y) VALUES('value_x','value_y');
COMMIT;
如果您需要user表中的最后一个id,可以使用LAST_INSERT_ID()函数。
答案 2 :(得分:-1)
尝试使用mysqli_multi_query,请检查此链接,例如http://blog.ulf-wendel.de/2011/using-mysql-multiple-statements-with-php-mysqli/