簡體   English   中英

PHP和SQL Server錯誤處理?

[英]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

為什么不簡單地使用交易呢? 如果任何查詢失敗,則執行回滾並將錯誤發布到客戶端。

我使用以下內容,查詢只是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語句?

Php具有Try and Catch語法,可進行有效的錯誤處理。 以下鏈接可能是您感興趣的。

PHP嘗試並捕獲SQL插入

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM