トランザクション説明
AUTO INCREMENT値を「LAST_INSERT_ID()」関数で取得 トランザクションについて 参考:https://bituse.info/ トランザクションはDBへの変更内容を一時的に蓄えておいて、 それを一気にDBに反映する処理をしてくれる。 transactionメソッドはトランザクションを開始して、「オートコミットモード」をオフにする。 暗黙のコミットでオートトランザクション有効な命令→「ALTER TABLE、CREATE TABLE、CREATE INDEX、DROP TABLE、DROP INDEX」PHP
//PDOのトランザクションは以下のステップで実行されます。
//beginTransactionメソッドでトランザクション開始
// ↓
// 各種クエリを実行
// ↓
//正常時はcommitメソッドで変更内容をDBに反映(コミット)、トランザクション終了
//異常時はrollBackメソッドで変更内容を破棄(ロールバック)、トランザクション終了
PHP
//******************************************************
// DBへ新規登録(+トランザクション処理 + idリターン)
//
//******************************************************
function Blog_POST_Input($content)
{
global $this_mes;//処理結果表示
global $this_error;//エラー表示
// DBアクセス-------------
try {
include_once("fanction_getdata.php");
$pdo = PDO_mzashop_program(); //function処理 DB接続情報
$pdo->beginTransaction();//トランザクション開始(オートトランザクション無効)
//--------------
//新規登録
//-------------
try{
//PODオブジェクト作成(VALUESで仮定義)
$sql = 'INSERT INTO post(content)
VALUES(:content)
RETURNING `url_id`';
//プリペイドステートメントを生成
$stt = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL) );
//プリペイドステートメント実行
$stt -> execute( array(
':content' => $content,
) );
//エラーがなければコミット
$pdo->commit();//追加完了
//url_idのリクエスト
$result = $stt->fetch(PDO::FETCH_ASSOC);
return $result['url_id'];//返り値
}catch(PDOExecption $e) {
$pdo->rollback();//エラー時はロールバックで変更内容を破棄
$this_error[] = "DB処理途中でError!: " . $e->getMessage() ;
}//----------
$this_mes[] = "DBへ登録済";//処理結果
$pdo = NULL;//DB切断
} catch (Exception $e) {
//エラー表示セット
$this_error[] = "DB取得エラー_".$e->getMessage()." - ".$e->getLine().PHP_EOL;
exit();
}//end_try
}//end_function