TOP ▲
itcore TOP プログラムパーツ
u_sql_go DB更新 insert, update, delete 共用 Laravel | itcore 2021年
PHP
関数
<?php
function u_sql_go($mode, $table, $request, $a_insert_fld, $a_update_fld, $a_where_fld)
{
  // set変数
  $set = "";
  $a_set = [];
  $a_req_var = "" == $mode ? $a_insert_fld : $a_update_fld;
  foreach ($a_req_var as $fld => $value) {
    $set .= "$fld=?,";
    $value = "" == $value ? uGetObj($request, $fld) : $value;
    $a_set[] = $value;
  }
  $set = substr($set, 0, strlen($set) - 1);
  // where変数
  $where = "";
  $a_where = [];
  foreach ($a_where_fld as $fld => $value) {
    $where .= "$fld=?,";
    $value = "" == $value ? uGetObj($request, $fld) : $value;
    $a_where[] = $value;
  }
  $where = substr($where, 0, strlen($where) - 1);
  // SQL
  if ("" == $mode) {
    $sql = "insert into $table set $set";
    $a_data = $a_set;
  } elseif ("update" == $mode) {
    $sql = "update $table set $set where $where";
    $a_data = $a_set;
    $a_data = array_merge($a_data, $a_where);
  } elseif ("delete" == $mode) {
    $sql = "delete from $table where $where";
    $a_data = $a_where;
  }
  //echo "debug96 sql=$sql a_data=" . print_r($a_data, true); exit();
  // SQL実行
  $err = "";
  if ("" == $mode) {
    $err = u_insert($sql, $a_data);
  } elseif ("update" == $mode) {
    $cnt = u_update($sql, $a_data);
    if (-1 == $cnt) {
      $err = "ERROR104 DB updateでエラーが発生しました。";
    }
  } elseif ("delete" == $mode) {
    $cnt = u_delete($sql, $a_data);
    if (-1 == $cnt) {
      $err = "ERROR107 DB deleteでエラーが発生しました。";
    }
  }
  return $err;
}
// トランザクションなし、try-catch付き単独insert
// $err = u_insert($sql, $a_data);
function u_insert($sql, $a_data)
{
  $err = "";
  try {
    DB::insert($sql, $a_data);
    Log::debug("u_insert sql=$sql");
  } catch (\Exception $e) {
    $err = $e->getMessage();
    Log::error("u_insert sql=$sql error=$err");
  }
  return $err; // 例外エラーメッセージ
}
// トランザクションなし、try-catch付き単独update
// $cnt = u_update($sql, $a_data);
function u_update($sql, $a_data)
{
  $cnt = 0;
  try {
    $cnt = DB::update($sql, $a_data);
    Log::debug("u_update sql=$sql 更新件数=$cnt");
  } catch (\Exception $e) {
    $err = $e->getMessage();
    Log::error("u_update sql=$sql error=$err");
    return -1; // SQLエラー
  }
  return $cnt; // 更新件数
}
// トランザクションなし、try-catch付き単独delete
// $cnt = u_delete($sql, $a_data);
function u_delete($sql, $a_data)
{
  $cnt = 0;
  try {
    $cnt = DB::delete($sql, $a_data);
    Log::debug("u_delete sql=$sql 削除件数=$cnt");
  } catch (\Exception $e) {
    $err = $e->getMessage();
    Log::error("u_delete sql=$sql error=$err");
    return -1; // SQLエラー
  }
  return $cnt; // 削除件数
}
?>
テストプログラム
<?php include_once "u_sql_go.func"; ?>
<?php
?>
実行結果