PDOでUPDATE(MySQLのデータを更新)してみよう。
try
{
<span>%% inline_0 %%</span>stmt = <span>%% inline_1 %%</span>stmt->bindParam( ':id', <span>%% inline_2 %%</span>stmt->bindParam( ':password', <span>%% inline_3 %%</span>stmt->execute();
<span>%% inline_4 %%</span>e )
{
<span>%% inline_5 %%</span>pdo)はすでにどこかでつくられているとする。以下、上のようなコードの作り方を示す。
STEP1(try-catch)
PDOを使ってデータを挿入、更新、削除するときはtry-catch構文で囲み、PDOオブジェクトのbeginTransactionとcommitをtryの中で、rollbackをcatchの中で呼ぶ。下のコードはPDOで挿入、更新、削除するときの基本的な構文になる。
try
{
<span>%% inline_6 %%</span>pdo->commit();
}
catch ( Exception <span>%% inline_7 %%</span>pdo->rollback();
}
beginTransactionは「これからデータを書きかえる」という合図をしめす関数で、commitは「実際にデータを書きかえる」関数である。commitすることでPDOは初めてデータを更新する。逆にいえば、commitしないかぎり、プログラムでなにをしようがデータベースはいっさい更新されない。
STEP2(prepareとexecute)
try
{
<span>%% inline_8 %%</span>stmt = <span>%% inline_9 %%</span>stmt->execute();
<span>%% inline_10 %%</span>e )
{
<span>%% inline_11 %%</span>pdo->beginTransaction();
<span>%% inline_12 %%</span>pdo->prepare( 'UPDATE account SET password="aaa" WHERE id=4' );
<span>%% inline_13 %%</span>pdo->commit();
}
catch ( Exception <span>%% inline_14 %%</span>pdo->rollback();
}
とすればいいかもしれないが、PDOではSQL文に値を直接入れることは一般的にしない。値はテーブルのカラム名にコロン(:)を加えた文字列を一時的に代入する。つまりpasswordには:passwordを、idには:idを入れる。
try
{
<span>%% inline_15 %%</span>stmt = <span>%% inline_16 %%</span>stmt->execute();
<span>%% inline_17 %%</span>e )
{
<span>%% inline_18 %%</span>pdo->beginTransaction();
<span>%% inline_19 %%</span>pdo->prepare( 'UPDATE account SET password=:password WHERE id=:id' );
<span>%% inline_20 %%</span>id, PDO::PARAM_INT );
<span>%% inline_21 %%</span>password, PDO::PARAM_STR );
<span>%% inline_22 %%</span>pdo->commit();
}
catch ( Exception <span>%% inline_23 %%</span>pdo->rollback();
}
STEP2で一時的に入れたカラムの値を、bindParamで実際に入れたい値に書きかえる。上の例ではpasswordにすでに値が入っているとする。
bindParamはPDO::PARAM_INTといった変数の型を指定する。