php如何嫵媚地生成執行的sql語句

無聲勝有聲發表於2015-05-09

  會不會碰到這樣一種情況呢?每次獲取資料將資料和歷史版本都有一定的差別,然而用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;
    }

 

當然,這個方法還有很多可以斟酌的地方。能用,但不是最好的。園子的猿猿們你們有更好的方法嗎?請告訴我吧!


相關文章