我有一个 PHP 页面,它在 SQL Server 数据库中执行并插入 3 个不同的查询。
对此执行错误处理的最佳方法是什么?
基本上,我只想连续执行它们,所以如果第一个失败,那么不要继续,基本上将错误返回给客户端。
我目前已将它们存储在变量中,例如
$sql_1 = "insert into ..."
和
$sql_2 = "insert into ..."
然后我使用了 if 语句来调用变量,但它看起来很乱。
我有一个 PHP 页面,它在 SQL Server 数据库中执行并插入 3 个不同的查询。
对此执行错误处理的最佳方法是什么?
基本上,我只想连续执行它们,所以如果第一个失败,那么不要继续,基本上将错误返回给客户端。
我目前已将它们存储在变量中,例如
$sql_1 = "insert into ..."
和
$sql_2 = "insert into ..."
然后我使用了 if 语句来调用变量,但它看起来很乱。
我建议您在存储过程中执行所有查询,然后从 PHP 页面调用该存储过程,如果出现故障,存储过程可以返回错误。一个非常基本的存储过程示例
CREATE PROCEDURE MyProcedure
BEGIN TRY
BEGIN TRANSACTION
Insert ....
delete....
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SELECT 'Transaction failed'
END CATCH
Php 具有 Try 和 Catch 语法,可有效处理错误。以下链接可能很有趣。
为什么不简单地使用事务?如果任何查询失败,您将执行回滚并将错误发布到客户端。
我使用以下内容,查询只是 mssql_query 的一个包装器 + 一些带有 ERROR_MESSAGE() 的附加逻辑,以获取更多信息性错误消息。
您可能想使用 PDO,我从一个旧项目中得到这个,适用于 MSSQL 2008。
function StartTransaction() {
$sql = "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ";
$res = $this->Query($sql);
$sql = "set implicit_transactions on;";
$res = $this->Query($sql);
}
function RollbackTransaction() {
$sql = "IF @@TRANCOUNT > 0 ROLLBACK TRAN";
$res = $this->Query($sql);
$sql = "set implicit_transactions off;";
$res = $this->Query($sql);
$sql = "SET TRANSACTION ISOLATION LEVEL READ COMMITTED";
$res = $this->Query($sql);
}
function CommitTransaction() {
$sql = "IF @@TRANCOUNT > 0 COMMIT TRAN";
$res = $this->Query($sql);
$sql = "set implicit_transactions off;";
$res = $this->Query($sql);
$sql = "SET TRANSACTION ISOLATION LEVEL READ COMMITTED";
$res = $this->Query($sql);
}
您可能会使用exit ([ string $status ] );
这会立即停止您的脚本,并且您可以显示错误或将标题位置更改为错误页面。
http://php.net/manual/en/function.exit.php
其他明智的使用一系列 if 语句?