Как определить, была ли транзакция успешной или неудачной? - PullRequest
1 голос
/ 24 декабря 2009

Я использую MySQL и PHP.

Выполнение этой транзакции:

begin;
....
commit;

Как я должен судить, не удалось ли это в PHP?

Ответы [ 3 ]

1 голос
/ 24 декабря 2009

Проверьте результат ( mysql_query, PHP Manual ):

Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query () возвращает ресурс в случае успеха или FALSE в случае ошибки.

Для операторов SQL другого типа: INSERT, UPDATE, DELETE, DROP и т. Д. Mysql_query () возвращает TRUE в случае успеха или FALSE в случае ошибки.

Пример (в стиле PHP4): РЕДАКТИРОВАТЬ : улучшенный пример для комментария Йоханнеса

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, СМ. Использование попытки захвата PDO в функциях

0 голосов
/ 24 декабря 2009

После каждого выполненного SQL убедитесь, что БД не вернула ошибку. Используйте http://www.php.net/manual/en/function.mysql-errno.php для проверки ошибок.

БД может возвращать ошибки в любой момент, и каждый SQL всегда должен проверяться в любом случае ...

0 голосов
/ 24 декабря 2009

Как правило, следует ожидать, что из базы данных будет возвращена ошибка, если транзакция завершится неудачно, так же, как если бы вы попытались выполнить один запрос с ошибкой.

Обратите внимание, что не все типы таблиц MySQL поддерживают транзакции.

...