PHP & SQL Server Error Handling?


PHP & SQL Server Error Handling?

我有一个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

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

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

Php 具有 Try and Catch 语法,以实现有效的错误处理。以下链接可能会引起您的兴趣。

PHP 尝试并捕获 SQL 插入

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

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

我使用以下方法,查询只是围绕 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);
}