phpでは,実行するsql文を配列で色っぽく生成することを実現する.

1542 ワード

このような状況に遭遇するのではないでしょうか.データを取得するたびにデータと履歴バージョンに一定の差がありますが、ThinkPHPのaddAll()関数では、既存のデータを削除して再書き込みします.これは明らかに私たちが望んでいるものではありません.しかし、自分でsqlを書くたびに数十個のフィールドも酔っ払っています.どのように優雅で簡単にsqlの自動生成を実現しますか?そこで次の方法がありました.

/**
   * [array_to_sql     key value      sql]
   * @param [type] $array  [key, value    ]
   * @param string $type  [sql  insert,update]
   * @param array $exclude [     ]
   * @return [string]     [      sql]
   */
  function array_to_sql($array, $type='insert', $exclude = array()){
    
    $sql = '';
    if(count($array) > 0){
      foreach ($exclude as $exkey) {
        unset($array[$exkey]);//     key
      }

      if('insert' == $type){
        $keys = array_keys($array);
        $values = array_values($array);
        $col = implode("`, `", $keys);
        $val = implode("', '", $values);
        $sql = "(`$col`) values('$val')";
      }else if('update' == $type){
        $tempsql = '';
        $temparr = array();
        foreach ($array as $key => $value) {
          $tempsql = "'$key' = '$value'";
          $temparr[] = $tempsql;
        }

        $sql = implode(",", $temparr);
      }
    }
    return $sql;
  }

もちろん、この方法には吟味できるところがたくさんあります.使えますが、一番いいものではありません.園子の猿たちはもっと良い方法がありますか?教えてください!