Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何判断交易是否成功?_Php_Mysql_Transactions - Fatal编程技术网

Php 如何判断交易是否成功?

Php 如何判断交易是否成功?,php,mysql,transactions,Php,Mysql,Transactions,我正在使用MySQL和PHP 运行此事务: begin; .... commit; 我应该如何判断它在PHP中是否失败?通常,如果事务失败,您应该期望从数据库返回一个错误,就像您尝试执行一个duff查询一样 请注意,并非所有MySQL表类型都支持事务。通常,如果事务失败,您应该期望从数据库返回一个错误,就像您尝试执行一个duff查询一样 请注意,并非所有MySQL表类型都支持事务。检查结果(): 对于返回resultset的SELECT、SHOW、DESCRIBLE、EXPLAIN和其他语句,

我正在使用MySQL和PHP

运行此事务:

begin;
....
commit;

我应该如何判断它在PHP中是否失败?

通常,如果事务失败,您应该期望从数据库返回一个错误,就像您尝试执行一个duff查询一样


请注意,并非所有MySQL表类型都支持事务。

通常,如果事务失败,您应该期望从数据库返回一个错误,就像您尝试执行一个duff查询一样

请注意,并非所有MySQL表类型都支持事务。

检查结果():

对于返回resultset的SELECT、SHOW、DESCRIBLE、EXPLAIN和其他语句,mysql_query()在成功时返回资源,在出错时返回FALSE

对于其他类型的SQL语句,如INSERT、UPDATE、DELETE、DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE

示例(PHP4样式):编辑:根据johannes的评论改进示例

mysql_connect("localhost", "username", "password") or die( mysql_error() );

mysql_select_db("test") or die(mysql_error());

$query = "INSERT INTO ..."; //Query here

mysql_query("BEGIN"); // transaction begins

$result = mysql_query($query);

if(!$result)
{
    mysql_query("ROLLBACK"); //Transaction rolls back
    echo "Rolled Back.";
    exit;
}
else 
{
    $committed = mysql_query("COMMIT"); //Commit Transaction
    if(!$committed)
    {
        //Commit Failed, take appropriate action
    }
    else
    {
        echo "Successful Insert.";
    }
}
或者,有关PDO的用法,请参见检查结果():

对于返回resultset的SELECT、SHOW、DESCRIBLE、EXPLAIN和其他语句,mysql_query()在成功时返回资源,在出错时返回FALSE

对于其他类型的SQL语句,如INSERT、UPDATE、DELETE、DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE

示例(PHP4样式):编辑:根据johannes的评论改进示例

mysql_connect("localhost", "username", "password") or die( mysql_error() );

mysql_select_db("test") or die(mysql_error());

$query = "INSERT INTO ..."; //Query here

mysql_query("BEGIN"); // transaction begins

$result = mysql_query($query);

if(!$result)
{
    mysql_query("ROLLBACK"); //Transaction rolls back
    echo "Rolled Back.";
    exit;
}
else 
{
    $committed = mysql_query("COMMIT"); //Commit Transaction
    if(!$committed)
    {
        //Commit Failed, take appropriate action
    }
    else
    {
        echo "Successful Insert.";
    }
}

或者,对于PDO的使用,请参见每次执行SQL后检查数据库是否没有返回错误。用于检查错误


DB可能会在任何时候返回错误,并且应该始终检查每个SQL…

在执行每个SQL之后,检查DB是否没有返回错误。用于检查错误


DB可能会在任何时候返回错误,并且应该始终检查每个SQL…

不要过度使用@Operator。这使得调试非常困难。而是将“显示错误”设置为“关闭”,并将错误记录到日志文件中。而且您没有检查提交是否成功……不要过度使用@Operator。这使得调试非常困难。而是将“显示错误”设置为“关闭”,并将错误记录到日志文件中。你没有检查提交是否成功。。。