【发布时间】:2009-12-24 08:18:44
【问题描述】:
我正在使用 MySQL 和 PHP。
运行此事务:
begin;
....
commit;
在PHP中如何判断是否失败?
【问题讨论】:
标签: php mysql transactions
我正在使用 MySQL 和 PHP。
运行此事务:
begin;
....
commit;
在PHP中如何判断是否失败?
【问题讨论】:
标签: php mysql transactions
检查结果(mysql_query, PHP Manual):
对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。
对于其他类型的 SQL 语句,INSERT、UPDATE、DELETE、DROP 等,mysql_query() 成功时返回 TRUE,错误时返回 FALSE。
示例(PHP4 风格):EDIT:根据 johannes 的评论改进示例
mysql_connect("localhost", "username", "password") or die( mysql_error() );
mysql_select_db("test") or die(mysql_error());
$query = "INSERT INTO ..."; //Query here
mysql_query("BEGIN"); // transaction begins
$result = mysql_query($query);
if(!$result)
{
mysql_query("ROLLBACK"); //Transaction rolls back
echo "Rolled Back.";
exit;
}
else
{
$committed = mysql_query("COMMIT"); //Commit Transaction
if(!$committed)
{
//Commit Failed, take appropriate action
}
else
{
echo "Successful Insert.";
}
}
或者,对于 PDO 的使用,请参阅 PDO try-catch usage in functions
【讨论】:
通常,如果事务失败,您应该期望从数据库返回错误,就像您尝试执行单个 duff 查询一样。
请注意,并非所有 MySQL 表类型都支持事务。
【讨论】:
每次执行 SQL 后,检查数据库是否返回错误。使用http://www.php.net/manual/en/function.mysql-errno.php 检查错误。
数据库可能随时返回错误,无论如何都应该检查每个 SQL...
【讨论】: