WEB开发网
开发学院数据库MySQL 用新的PHP插件实现MySQL为基础的事务 阅读

用新的PHP插件实现MySQL为基础的事务

 2007-11-11 16:00:15 来源:WEB开发网   
核心提示: 工作实例要了解这个在实践中是怎么工作的,让我们回到前面讨论过的银行转帐的例子.我们假设你的任务是建立一个简单的Web应用程序,用新的PHP插件实现MySQL为基础的事务(2),让用户在他们的银行帐户间转帐,我们再进一步假设一个单独用户的帐户存储在一个MySQL(和PHP搭配之最佳组合)数据库中,即贷方,假设我们所做的

工作实例

要了解这个在实践中是怎么工作的,让我们回到前面讨论过的银行转帐的例子.我们假设你的任务是建立一个简单的Web应用程序,让用户在他们的银行帐户间转帐。我们再进一步假设一个单独用户的帐户存储在一个MySQL(和PHP搭配之最佳组合)数据库中,如下所示:

MySQL(和PHP搭配之最佳组合)> SELECT * FROM accounts;

+----+------------+---------+

| id | label | balance |

+----+------------+---------+

| 1 | Savings #1 | 1000 |

| 2 | Current #1 | 2000 |

| 3 | Current #2 | 3000 |

+----+------------+---------+

3 rows in set (0.34 sec)

现在,需要建立一个简单的界面,使用户能够输入一个现金数额,实现从一个帐户到另一个的转帐。实际的“交易”将用两个UPDATE语句来执行,一个将转帐金额从源帐户取出,即借方,另一个将转帐金额记入目标帐户,即贷方。假设我们所做的是在帐户之间进行转帐,那么所有帐户的可用结余总额($6000)应该一直保持不变。

列表B显示了可能的代码:

列表 B

php

// connect to database

$dbh = MySQL(和PHP搭配之最佳组合)i_connect("localhost", "user", "pass", "test") or die("Cannot connect");

// turn off auto-commit

MySQL(和PHP搭配之最佳组合)i_autocommit($dbh, FALSE);

// look for a transfer

if ($_POST['submit'] && is_numeric($_POST['amt'])) {

// add $$ to target account

$result = MySQL(和PHP搭配之最佳组合)i_query($dbh, "UPDATE accounts SET balance = balance + " . $_POST['amt'] . " WHERE id = " . $_POST['to']);

if ($result !== TRUE) {

MySQL(和PHP搭配之最佳组合)i_rollback($dbh); // if error, roll back transaction

}

// subtract $$ from source account

$result = MySQL(和PHP搭配之最佳组合)i_query($dbh, "UPDATE accounts SET balance = balance - " . $_POST['amt'] . " WHERE id = " . $_POST['from']);

if ($result !== TRUE) {

MySQL(和PHP搭配之最佳组合)i_rollback($dbh); // if error, roll back transaction

}

// assuming no errors, commit transaction

MySQL(和PHP搭配之最佳组合)i_commit($dbh);

}

// get account balances

// save in array, use to generate form

$result = MySQL(和PHP搭配之最佳组合)i_query($dbh, "SELECT * FROM accounts");

while ($row = MySQL(和PHP搭配之最佳组合)i_fetch_assoc($result)) {

$accounts[] = $row;

}

// close connection

MySQL(和PHP搭配之最佳组合)i_close($dbh);

?>

 

Tags:PHP 插件 实现

编辑录入:coldstar [复制链接] [打 印]
赞助商链接