2016-07-14 2 views
1

Вот структура моего скрипта:Перенаправление перед выполнением фиксации()

try { 
    $dbh_conn->beginTransaction(); 

    $stmt1 = $dbh_conn->prepare("UPDATE ..."); 
    $stmt1->execute(array($val1)); 

    if (condition 1) { 
     $stmt2 = $dbh_conn->prepare("DELETE ..."); 
     $stmt2->execute(array($val2)); 

     header('location: ../page1'); 
     exit; 

    } else { 
     header('location: ../page2'); 
     exit; 
    } 

    $dbh_conn->commit(); 

} catch(PDOException $e) { 

    $dbh_conn->rollBack(); 
    echo $e; 

} 

Это удивительно работает .. Как вы видите, есть if - else утверждение (всегда один из них будет выполнен), которые оба блока (оба if и else) имеют exit;. Также $dbh_conn->commit(); строка после этого if - else заявление.

На самом деле эти два запроса не должны выполняться. Потому что есть exit; до commit(). Но оба запроса выполняются. Итак, как PHP компилирует мой скрипт? И моя структура скриптов в порядке? (не нужно что-то менять?)

+2

'exit' Завершает работу скрипт прямо здесь! Но если у вас установлен AUTO-COMMIT, то, если вы не запустите «rollback», данные будут зафиксированы – RiggsFolly

+1

На самом деле есть еще одна возможность! Являются ли эти таблицы MYISAM, потому что транзакции не работают на MYISAM, но это позволяет использовать синтаксис транзакций – RiggsFolly

+0

@RiggsFolly Yay .. это тот. –

ответ

1

Если ваши таблицы являются MYISAM, тогда транзакции не работают.

Однако, поскольку mysql api не сломается, транзакционные функции/методы не вызывают ошибки, которые, как они выглядят, работают нормально, за исключением того, что каждое обновление базы данных совершается так, как это происходит.

Смежные вопросы