0

トランザクションの開始後にエラーが発生した場合に備えて、一連の PDO MYSQl クエリを実行する必要があります。例外をキャッチできません。テーブル名を間違えたのに。例えば

class user extends PDO
{
function empid()
{
$dbh->beginTransaction();
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

try
{
    $update= "update user set data=1 where user_id = 11";
    $update_pre = $dbh->prepare($update);
    $code_pre->execute();

    $insert="insert into user set user name="jesi",age='22';
    $insert_pre = $dbh->prepare($insert);
    $insert_pre->execute();
    dbh->commit

}
catch(Exception $e)
{
$dbh->rollBack();

file_put_contents('mylog.txt', $e->getMessage(), FILE_APPEND); 
}
}
}

何か案は ???

4

1 に答える 1

0

コードに多数の構文エラーが含まれているため、PHP で解析できません。

  1. ;への呼び出しの後にステートメント ターミネータがありませんPDO::beginTransaction()。また、PDO オブジェクトが使用される前に呼び出す必要があると思います (この場合、その呼び出しの前に) :PDO::setAttribute()

    $dbh->beginTransaction();
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
    

    したがって、代わりに次のように変更します。

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->beginTransaction();
    
  2. UPDATEPDOStatement オブジェクトにという名前を付けますが、 でメソッド$update_preを呼び出そうとします。execute()$code_pre

        $update_pre = $dbh->prepare($update);
        $code_pre->execute();
    

    したがって、代わりに次のように変更します。

        $update_pre = $dbh->prepare($update);
        $update_pre->execute();
    
  3. INSERTSQL内でネストされた文字列リテラルを誤って引用しています。

        $insert="insert into user set user name="jesi",age='22';
        //  this double quote ends the string --^
        //  and everything thereafter is unparseable
    

    したがって、代わりに次のように変更します。

        $insert="insert into user set user name='jesi',age='22'";
    

    注意: 通常、数値リテラルを文字列として引用するべきではありません。さらに、これらのリテラルをアプリケーション変数から置き換える場合は、パラメーター化されたクエリを使用する必要があります。

  4. トランザクションをコミットしようとして、 (オブジェクト$への参照から) 変数識別子、メソッド呼び出しの引数括弧、およびステートメント ターミネータを省略しました。dbh();

        dbh->commit
    

    したがって、代わりに次のように変更します。

        $dbh->commit();
    
于 2013-10-03T13:00:12.127 に答える