我有一個PHP頁面,它執行並在SQL Server數據庫中插入3個不同的查詢。PHP和SQL Server錯誤處理?
用這個來執行錯誤處理的最好方法是什麼?
基本上,我只想執行它們的串行,所以如果第一個失敗,那麼不要繼續,基本上把一個錯誤回到客戶端。
我已經當前存儲他們的變量,比如
$sql_1 = "insert into ..."
和
$sql_2 = "insert into ..."
然後我用這是否在做變量的調用語句,但它只是似乎很凌亂。
我有一個PHP頁面,它執行並在SQL Server數據庫中插入3個不同的查詢。PHP和SQL Server錯誤處理?
用這個來執行錯誤處理的最好方法是什麼?
基本上,我只想執行它們的串行,所以如果第一個失敗,那麼不要繼續,基本上把一個錯誤回到客戶端。
我已經當前存儲他們的變量,比如
$sql_1 = "insert into ..."
和
$sql_2 = "insert into ..."
然後我用這是否在做變量的調用語句,但它只是似乎很凌亂。
我會建議您在存儲過程中執行所有查詢,然後您從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,我得到這個從舊的項目,適用於2008年MSSQL
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);
}
真的嗎?你有一個例子嗎?那將是我需要的!謝謝 – realtek
也許你可以使用一個exit ([ string $status ]);
這會阻止你的腳本直線距離,你可以顯示一個錯誤或將標題位置更改爲錯誤頁面。 http://php.net/manual/en/function.exit.php
其他明智地使用一系列if語句?
Php具有Try和Catch語法以進行有效的錯誤處理。以下鏈接可能會引起您的興趣。
很好的點... ...是的,我將使用存儲過程的,但是早期的發展過程中,我做了一些硬編碼的SQL(EWWW)只是爲了讓我離開地面,然後打開進入SP的。我會毫不猶豫地走下去,我想我可以按照建議回退SP中的交易 – realtek
可能有一些工作需要一次性傳遞所有插入所需的所有數據。 –
的確如此,但是沒有關於他會傳遞多少或什麼樣的字段的信息,所以我把它留給了@ hidden_4003 – Hedinn