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