2

このコードを実行したとき

<?php

include '../bin/config.php';
connect();

if (isset($_GET['id']) && is_numeric($_GET['id'])){

    $id = $_GET['id'];
    $stmt = $conn->prepare("DELETE FROM noteline WHERE Nid = ?");
    $stmt->bindParam(1, $id, PDO::PARAM_INT);

    $outcome = $stmt->execute();

    if ($outcome){

        echo 'it was successfully deleted';
        header("Location: ../noteline");
    }else {

        echo 'it was not successful due to something';
    }
}


?>

「正常に削除されました」とエコーされましたが、データベースから何も削除されませんでした...しかし、次のようにこのコードを変更してトランザクションを開始すると、次のようになります。

<?php

include '../bin/config.php';
connect();

if (isset($_GET['id']) && is_numeric($_GET['id'])){

    $id = $_GET['id'];
    $stmt = $conn->prepare("DELETE FROM noteline WHERE Nid = ?");
    $stmt->bindParam(1, $id, PDO::PARAM_INT);

    $conn->beginTransaction();
    $outcome = $stmt->execute();

    if ($outcome){

        $conn->commit();
        echo 'it was successfully deleted';
        header("Location: ../noteline");
    }else {

        echo 'it was not successful due to something';
    }
}


?>

私のデータはついに私のMySQLデータベースから削除されました!理由を知りたいですか?

4

2 に答える 2

2

PDO 接続が自動コミット モードを無効にして動作しているためです。connect()関数を調べて、このモードを無効にしないようにしてください。

(また、接続オブジェクトを格納するためにグローバル変数を使用しているようです。可能であれば、グローバル変数を避けてください。)

于 2012-11-09T03:50:58.830 に答える
0

サーバーで自動コミットがオフになっている可能性がありますか?

http://dev.mysql.com/doc/refman/5.0/en/commit.html

デフォルトでは、MySQL は自動コミット モードを有効にして実行されます。これは、テーブルを更新 (変更) するステートメントを実行するとすぐに、MySQL が更新をディスクに保存して永続化することを意味します。

コードのどこかに送信する行があるかもしれません

SET autocommit=0;

あなたのサーバーに。

于 2012-11-09T03:53:26.413 に答える