PHPでDB更新エラー対策、更新数が多い場合はトランザクション処理で登録

PHPとMySQLデータベースについて PHP/MySQL

トランザクション説明

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


更新したidを取得 参考https://www.php.net/
タイトルとURLをコピーしました