MySQLi:如何使用准备好的语句插入到多个表中[重复]

问题描述 投票:0回答:3

我处于需要在查询中插入 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);
    
php mysql mysqli
3个回答
1
投票
我在尝试复制像弗兰克这样的答案时遇到了问题。正确的做法是:

try { $db->beginTransaction(); $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(PDOException $ex) { //Something went wrong rollback! $db->rollBack(); throw $ex->getMessage(); }
第一条语句执行后,您可以使用以下命令从 PHP 访问 insertID:$last_id = $db->lastInsertId();

希望这有帮助!


-1
投票
尝试使用 mysqli_multi_query,例如检查此链接

http://blog.ulf-wendel.de/2011/using-mysql-multiple-statements-with-php-mysqli/


-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;

如果需要用户表中的最后一个 ID,可以使用 LAST_INSERT_ID() 函数。

© www.soinside.com 2019 - 2024. All rights reserved.