[php+sql]データを上書きする方法

毎度作るとつかれて書き残すのを忘れる。

取得~編集

DBから該当データを引っ張ってきて、変数に入れる。

<?php 
$id = '【照合用ユニークコード】';
$sql = "SELECT * FROM 【テーブル名】 WHERE id = {$id}";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$result = $stmt -> fetch();
$dbh = null;

$example01 = (empty($result['example01']))? '' : $result['example01'];
$example04 = (empty($result['example02']))? '' : $result['example02'];
$example03 = (empty($result['example03']))? '' : $result['example03'];
    ︙
?>

編集は普通にフォーム。登録済みをvalueに突っ込む。

<form action="check.php" method="post">
    <input type="text" name="id" readonly value="<?php print $id; ?>">
    <input type="text" name="example01" value="<?php print $example01; ?>">
    <input type="text" name="example02" value="<?php print $example02; ?>">
    <input type="text" name="example03" value="<?php print $example03; ?>">
        ︙
    <button type="submit"><span>保存</span></button>
</form>

上書き

DBから該当データを引っ張って、各カラムに上書きする。

<?php

$id = $_POST['id'];
$example01 = (empty($_POST['example01']))? '' : $_POST['example01'];
$example02 = (empty($_POST['example02']))? '' : $_POST['example02'];
$example03 = (empty($_POST['example03']))? '' : $_POST['example03'];
    ︙

try {
    $updateSet = 'example01 = :example01, example02 = :example02, example03 = :example03, ...';
    $updateSetData = array(':id'=>$id, ':example01'=>$example01, ':example02'=>$example02, ':example03'=>$example03, ...);

    /* $dbh省略 */
    $sql = "UPDATE 【テーブル名】 SET {$updateSet} WHERE id = :id";
    $stmt = $dbh->prepare($sql);
    $stmt->execute($updateSetData);
    $dbh = null;
} catch (Exception $e) {
	echo 'エラーが発生しました。:' . $e->getMessage();
}

:idはWHEREで代入するやつ。$sqlに$idを直接突っ込んでもいいんだけど、一括で代入するarray()にまとめたほうがいいんじゃないかって思った。

上書きできない場合のチェック方法

記述が間違ってなかったら普通は動く。変数名を並べるのは大変なんで、極力ヒューマンエラーが起きないようにexcelとかで一括整形して予防する。

記述が間違ってないのに動かない場合、POSTを疑う。最初に変数を宣言した内容が、手前の入力フォームに含まれなかった(=送信されなかった)場合、変数の中身がぶっ壊れるので動作しなくなる。emptyをissetに変えて、nullを代入すればよさそうだけど、きっちり作れてたら問題ないのでいじらなくていいと思う。

それから、変数化したものがちゃんとsqlに入ってることを確認する。

sql文内で書かれてる変数が宣言されていない場合もアウト。

画面上にエラーが出ず、上書き処理がされないまま完了することがある。なので、フォームをsubmitしてデータが更新されてるかをチェックする感じでやっていくことになる。

まとめ

今どき手作業でPHPをいじくってDBを操作するなんてあんまりないだろうし、労力すごいからやらないで済むに越したことはないですね。

コメント

タイトルとURLをコピーしました