我之前从未使用过交易,但我想确保当我通过HTML表单将数据导入数据库时,如果出现问题,就会有回滚。
听起来很棒,但我很难完全理解它们在MySQL查询中的位置和用法。
$sql = "BEGIN
/* Insert the user to the WordPress Database */
INSERT INTO wp_users (user_login, user_pass, user_email)
VALUES ('John', 'Doe', 'john@example.com');
/* Insert the user into our Custom Database */
INSERT INTO users (ID, name)
VALUES (LAST_INSERT_ID(), 'John')
COMMIT";
我编辑了一些代码以便于阅读,而且我知道密码不安全,但是我对BEGIN&交易的COMMIT函数?
我也在尝试使用Transactions,这样我就可以充分利用LAST_INSERT_ID()函数。这应该允许我确保在两个数据库之间,用户将共享相同的ID,以便我可以出于各种网站应用原因轻松调用其唯一数据。
我在网上发现了一些东西,但没有一个真正提供了一个容易理解的例子。我究竟做错了什么?我的实施很糟糕,还是我错过了什么? LAST_INSERT_ID()会像那样工作吗?
我非常感谢您提供的任何帮助。谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
由于您使用的是Mysqli,并且如果查询的任何部分失败或者在查询成功时提交,您希望回滚,您可以执行以下代码中显示的操作:
(我也假设这部分错了“INSERT INTO用户(ID,名称) VALUES(LAST_INSERT_ID(),'John')“你可能想要使用”UPDATE“)
//just a temporary variable to store eventual error
$query_ok=true;
//start transaction here
$mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
$mysqli->query("INSERT INTO wp_users (user_login, user_pass, user_email)
VALUES ('John', 'Doe', 'john@example.com');") ? null : $query_ok=false;
$mysqli->query("UPDATE users SET name ='John' WHERE ID=".$mysqli->insert_id ) ? null : $query_ok=false;
//if $query_ok is still set to true then we commit changes to database otherwise we do rollback
$query_ok ? $mysqli->commit() : $mysqli->rollback();
你也可以使用程序样式(mysqli_query,mysqli_insert_id等)