[英]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語法,可進行有效的錯誤處理。 以下鏈接可能是您感興趣的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.