ねっとぱんだ-プログラミング勉強ブログ-

Webデザイン、プログラミングの勉強ブログ。

【php】レコードの削除・更新とTransaction

レコードの更新、排除

レコードの削除

レコードの名前を指定して削除するsql文をprepareで指定
executeでプレースホルダーに消したい名前を指定して実行。

rowCount()
PDOStatement->rowCount() — 直近の SQL ステートメントによって作用した行数を返す。
引用:http://www.weblio.jp/content/PDOStatement-%3ErowCount()
    $stmt = $db->prepare('delete from users where name = :name');
    $stmt->execute([
        ':name'=>'takeuchi',
    ]);
    
    echo 'row deleted' . $stmt->rowCount();

レコードの変更

上のコードのsql文やプレースホルダーに入る値を変更用に変える。

    $stmt = $db->prepare('update users set score = :score where name = :name');
    
    $stmt->execute([
    ':score' => 100,
    ':name'=>'suzuki'
    ]);
    
    echo 'row updated:' . $stmt->rowCount();

transaction

必ず実行させたい一連の命令があるときに使う。データの整合性を保つときに使う。
以下の例ではsuzukiのスコアを10引いてharaに10足す、という一連の流れを常にセットで実行されるようにしている。

try{
    $db = new PDO(dsn,user,password);
    //ここの意味
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    /*transactionを始める*/
    $db->beginTransaction();
    $db->exec("update users set score = score -10 where name = 'suzuki'");
    $db->exec("update users set score = score +10 where name = 'hara'");
    //あっている時に実行
    $db->commit();
    
}catch(PDOException $e){
    //エラーが出たら処理を元に戻す。
    $db->rollback();
    
    echo $e->getMessage();
    exit;
}