2

PHPでPDOを使用してデータベースの更新と挿入を行うのに問題があります。エラーコードは成功を示していますが、予想される変更はデータベースに反映されていません。

ここで接続を設定します。

    $dsn = "mysql:host=".DB_HOST.";dbname=".DB_NAME;
    $db = new PDO($dsn, DB_USER, DB_PASS);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE);

接続してSELECTを実行することはできますが、更新も挿入もまったく行われません。ハードコードされた文字列を使用してみましたが、それでも機能しません。そのためのコードは次のとおりです。

     $ins = "insert into choice_history (id_choice_history,choice_num,choice_taken) values ( 0, 10, 28);";
     if($stmt = $this->_db->prepare($ins))
     {
        $status  = $stmt->execute();
        return  $errorcode = $stmt->errorCode();
     }

似たような更新文字列がありますが、どちらも同じ結果になります。

テーブル定義(制約はありません):

mysql> describe choice_history;
+-------------------+---------+------+-----+---------+----------------+
| Field             | Type    | Null | Key | Default | Extra          |
+-------------------+---------+------+-----+---------+----------------+
| id                | int(11) | NO   | PRI | NULL    | auto_increment |
| id_choice_history | int(11) | NO   |     | NULL    |                |
| choice_taken      | int(11) | YES  |     | NULL    |                |
| choice_num        | int(11) | YES  |     | NULL    |                |
+-------------------+---------+------+-----+---------+----------------+

このためのエラーコードは常に00000(成功)です。同じ文字列でexec()を呼び出してみましたが、サイコロはありません。そのクエリをサーバーのmysqlに貼り付けることができ、正常に実行されますが、PDOからは何も起こりません。

この時点で私は途方に暮れています。PDOは成功を報告しますが、データベースでは何も起こりません。問題がどこにあるかをどのように把握できますか?

4

1 に答える 1

2

自動コミットをオフにしているため、commit()すべてのトランザクションを明示的に行う必要があります。

クエリは成功し(したがって、表示されている結果)、コミットされることはありません。

すべてのリクエストを明示的にコミットする必要がない場合は、次のコード行を削除する必要があります。

$db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE);
于 2013-01-18T21:50:06.840 に答える