PHPのPDOでUPDATE(MySQLのデータを更新)する例

PDOでUPDATE(MySQLのデータを更新)してみよう。

try
{
stmt = stmt->bindParam( ‘:id’, stmt->bindParam( ‘:password’, stmt->execute();
pdo->commit(); } catch ( Exception e )
{
pdo->rollback(); } PDOのオブジェクト(上のコードでいうpdo)はすでにどこかでつくられているとする。以下、上のようなコードの作り方を示す。

STEP1(try-catch)

PDOを使ってデータを挿入、更新、削除するときはtry-catch構文で囲み、PDOオブジェクトのbeginTransactionとcommitをtryの中で、rollbackをcatchの中で呼ぶ。下のコードはPDOで挿入、更新、削除するときの基本的な構文になる。

try
{
pdo->commit();
}
catch ( Exception e ) { pdo->rollback();
}

beginTransactionは「これからデータを書きかえる」という合図をしめす関数で、commitは「実際にデータを書きかえる」関数である。commitすることでPDOは初めてデータを更新する。逆にいえば、commitしないかぎり、プログラムでなにをしようがデータベースはいっさい更新されない。

STEP2(prepareとexecute)

try
{
stmt = stmt->execute();
pdo->commit(); } catch ( Exception e )
{
pdo->rollback(); } beginTransactionとcommitの間で、pdoのprepareを使ってstmtというオブジェクトをつくり、さらにexecuteメソッドを呼ぶ。executeはcommitの直前で呼ぶことが多い。 データベースをどのように変更するかは、prepareの中で決める。idが4のパスワードをaaaに変えたいときは try { pdo->beginTransaction();
pdo->prepare( ‘UPDATE account SET password=“aaa” WHERE id=4’ );
pdo->commit();
}
catch ( Exception e ) { pdo->rollback();
}

とすればいいかもしれないが、PDOではSQL文に値を直接入れることは一般的にしない。値はテーブルのカラム名にコロン(:)を加えた文字列を一時的に代入する。つまりpasswordには:passwordを、idには:idを入れる。

try
{
stmt = stmt->execute();
pdo->commit(); } catch ( Exception e )
{
pdo->rollback(); } ## STEP3(bindParam) try { pdo->beginTransaction();
pdo->prepare( ‘UPDATE account SET password=:password WHERE id=:id’ );
id, PDO::PARAM_INT );
password, PDO::PARAM_STR );
pdo->commit();
}
catch ( Exception e ) { pdo->rollback();
}

STEP2で一時的に入れたカラムの値を、bindParamで実際に入れたい値に書きかえる。上の例ではpasswordにすでに値が入っているとする。

bindParamはPDO::PARAM_INTといった変数の型を指定する。