ラボ > FuelPHP:DB関連

FuelPHPでupdate文で成功したときの結果

「更新箇所が無いときはupdate文を実行させない」という処理にしているなら、気にする必要はない

作成日:2018-05-08, 更新日:2018-05-08

経緯

諸々の事情・・・個人的な趣味でクエリを作ってそれをマルっと投げるってやり方をしている。

▼こんな感じ

$q = クエリ;
$prms = array(
  〇〇〇 => 〇〇〇,
  〇〇〇 => 〇〇〇,
);

$qBld = \DB::query($q);
if (is_array($prms)) {
  $qBld->parameters($prms);
}
$result = $qBld->execute();

※update文を実行すると「$result」には、更新したレコード数が返ってくる。

問題

今回、問題となったのは「update文を実行する前と後でレコードの各値が変わらない」とき。
→「$result==0」となる。失敗したときも同様。

手ごろな対策が思いつかないので・・・ひとまず下記のようにしてみた。

$q = クエリ;
$prms = array( // バインドするキーと値の組み合わせ
  〇〇〇 => 〇〇〇,
  〇〇〇 => 〇〇〇,
);

$qBld = \DB::query($q);
if (is_array($prms)) {
  $qBld->parameters($prms);
}
$result = $qBld->execute();

if ( $result == 0 ) {
  list($unifiedCode, $platformCode, $errorText) = \db::error_info();
  
  if ( $unifiedCode!='00000' || $platformCode!=null ) {
    // 更新失敗:構文エラーやカラム名の問題等
  }
  else {
    // 更新失敗じゃないけど、変更箇所がない
  }
}
else {
  // 更新成功
}

「$unifiedCode」の一覧が見つけられないので、ひとまず上記のような感じ。