1

トランザクションで奇妙な問題に直面しています。コードは次のとおりです。

$mysqli = $this->getMysqli();
    //Avoid Autocommitting
    $mysqli->autocommit(FALSE);       
    $mysqli->begin_transaction();

    $insertStatment = $mysqli->prepare('INSERT INTO '.$this->table.' (name, applied_at) VALUES (?, NOW())');
    try
    {    
        $mysqli->multi_query($sql);
        $insertStatment->bind_param('s', $name);
        $insertStatment->execute();
        $insertStatment->close();
        $mysqli->commit();
        $mysqli->close();
        return TRUE;
    }
    catch (Exception $e)
    {
      $mysqli->rollBack();
      return $e->getMessage(); 
    }

$insertStatement は commit() によって完全に無視されます。この行にコメントすると:

$mysqli->multi_query($sql);

それは完全に機能しますが、準備されたステートメントと multi_query を混在させると何か問題がありますか? $sql変数には複数の;分離されたSQLステートメントが含まれているため、マルチクエリが必要です。この問題を防ぐ方法はありますか?

4

0 に答える 0