MySQL事务 - BEGIN问题

时间:2016-07-19 09:30:31

标签: php mysql wordpress transactions

我之前从未使用过交易,但我想确保当我通过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()会像那样工作吗?

我非常感谢您提供的任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用PDO在php中处理事务。请参阅here

最后插入的行ID。请参阅here

答案 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等)