1

我有一个 PHP 页面,它在 SQL Server 数据库中执行并插入 3 个不同的查询。

对此执行错误处理的最佳方法是什么?

基本上,我只想连续执行它们,所以如果第一个失败,那么不要继续,基本上将错误返回给客户端。

我目前已将它们存储在变量中,例如

$sql_1 = "insert into ..."

$sql_2 = "insert into ..."

然后我使用了 if 语句来调用变量,但它看起来很乱。

4

4 回答 4

1

我建议您在存储过程中执行所有查询,然后从 PHP 页面调用该存储过程,如果出现故障,存储过程可以返回错误。一个非常基本的存储过程示例

CREATE PROCEDURE MyProcedure

BEGIN TRY
BEGIN TRANSACTION
 Insert ....

 delete....
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SELECT 'Transaction failed'
END CATCH
于 2013-10-11T12:01:08.683 回答
0

Php 具有 Try 和 Catch 语法,可有效处理错误。以下链接可能很有趣。

用于 SQL 插入的 PHP Try and Catch

http://php.net/manual/en/language.exceptions.php

于 2013-10-11T12:08:03.590 回答
0

为什么不简单地使用事务?如果任何查询失败,您将执行回滚并将错误发布到客户端。

我使用以下内容,查询只是 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);
}
于 2013-10-11T12:02:09.193 回答
0

您可能会使用exit ([ string $status ] );这会立即停止您的脚本,并且您可以显示错误或将标题位置更改为错误页面。 http://php.net/manual/en/function.exit.php

其他明智的使用一系列 if 语句?

于 2013-10-11T12:04:09.227 回答