PHPスクリプトのトランザクションに問題があります。私は複数のクエリを作成し、少なくとも1つが失敗した場合にそれらをすべて呼び出すことができるようにしたいと思います。スクリプトの簡単な例を見ることができます私が使用しています:私はライン消去するとPHP PDO - アクティブなトランザクションがありません
Uncaught exception 'PDOException' with message 'There is no active transaction'
:今
$tags_input = array(6,4,5);
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8',
DB_USER, DB_PASSW, array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$conn->beginTransaction();
$sql = "INSERT INTO projects (id, pr_id, enabled) VALUES (:val0, :val1, :val2)";
$stmt = $conn->prepare($sql);
if(count($tags_input)>0){
for($i = 0;$i<count($tags_input);$i++){
$stmt->bindValue(':val0', 57);
$stmt->bindValue(':val1', $tags_input[$i]);
$stmt->bindValue(':val2', 'Y');
$result = $stmt->execute();
}
}
$res1 = $conn->commit();
$conn->rollBack();
は、この例では、エラーが発生し $ conn->ロールバックを() ; エラーが表示されなくなるため、pdoオブジェクトが開いているトランザクションを表示できない理由を理解できません(begintransactionとcommitはエラーを生成しません)。私もトランザクション内にrollBack()を入れてみましたが、違いはありませんでした。私はまだ 'アクティブな取引はありません。
私はInnoDB上でPHP 5.6およびMysqlテーブルを実行しています。
あなたがここにトランザクションをコミットしている: '$ RES1 = $ conn->は(コミット);'あなたが第一の例のようにのtry-catchステートメントにトランザクションコードをラップ – e4c5
試みをロールバックすることはできませんので、 http://php.net/manual/en/pdo.transactions.php –
https://phpdelusions.net/pdo#transactions –