SQL編寫規範(多select、update、insert、delete)[PHP]

切勿在循環中,如(while、foreach、for) 出現(select、update、insert、delete)語句,e.g. :
1).批量更新數據update
      錯誤:
              if(!empty($data)){
                   foreach($dataas $k=>$val){
                       $query=" UPDATE ".TBL_CONFIG."SET config_value='$val'WHERE config_name='$k'";
                      DB()->ADM->execute($query);
                }
            }
     正確:
            if(!empty($data)){
                 $ids= '';
                 $query= "UPDATE ".TBL_CONFIG." SET config_value = CASE config_name";
                 foreach($data as $k => $val) {
                     if($ids!=''){$ids.=",";}$ids.="'$k'";
                     $query .= sprintf("WHEN '%s' THEN '%s'", $k, $val);
              }
              $query.= "END WHERE config_name IN ($ids)";
              DB()->ADM->execute($query);
        }
2).批理插入數據insert
    錯誤:
           if(!empty($data)){
                    foreach($data as $k=>$val){
                 $query=" INSERTINTO ".TBL_CONFIG."(config_value,config_name)VALUES('$val','$k')";
                 DB()->ADM->execute($query);
             }
         } 
     正確:
            if(!empty($data)){
                $query=" INSERT INTO ".TBL_CONFIG." (config_value,config_name)VALUES";
                $val_arr=array();
                foreach($data as $k=>$val){
                      $val_arr[]= " ('$val','$k')";
                }
               if(!empty($val_arr)){
                    $query.= implode(',', $val_arr);
                    DB()->ADM->execute($query);
                  }
                } 
3).批量查詢select
       錯誤:
             if(!empty($data)){
                      foreach($data as $k=>$val){
                          $query="SELECTconfig_valueFROM ".TBL_CONFIG." WHERE config_name='$k'";
                          $res=DB()->ADM->execute($query);
                          $out= DB()->ADM->arrays($res);
                          $data[$k][‘config_value’]= $out['config_value'];
                    }
                   print_r($data);
                } 
     正確:
            if(!empty($data)){
                    $keys= array_keys($data);$keys=implode(",", $keys);
                    $query="SELECT config_name,config_valueFROM ".TBL_CONFIG." WHERE config_name IN($keys)";
                    $res=DB()->ADM->execute($query);
                    while($out=DB()->ADM->arrays($res)){
                          $data[$out [‘config_name’]][‘config_value’]=$out[‘config_value’];
                    }
                   print_r($data);
               } 
4).批理刪除delete
     錯誤:
            if(!empty($data)){
                      foreach($data as $k=>$val){
                        $query=" DELETE FROM".TBL_CONFIG." WHERE config_name='$k'";
                        $res=DB()->ADM->execute($query);
                   }
                  print_r($data);
                 } 
      正確:
           if(!empty($data)){
                     $keys=array_keys($data);$keys=implode(",", $keys);
                     $query="DELETE FROM ".TBL_CONFIG."WHERE config_name IN($keys)";
                     $res=DB()->ADM->execute($query);
                     print_r($data);
             }
相關文章
相關標籤/搜索