PHP if.. elseif...else 問題

來源:互聯網
上載者:User
本帖最後由 xytianshiwx 於 2013-12-08 10:09:44 編輯

    |>|=)/i", $param)){//判斷where         $sql_param_list["where"] =$param;                  }elseif(preg_match("/\b(order|limit|group|)\b/i", $param,$param_name)){//判斷order|limit|group              switch ($param_name[0]){                case "order" : $sql_param_list["order"] =$param;                break;                case "limit" : $sql_param_list["limit"] =$param;                break;                case "group" : $sql_param_list["group"] =$param;                break;                             }         }else{            $sql_param_list["field"] =$param;         }     }         print_r($sql_param_list);


$param 沒有賦值個$sql_param_list["field"]??
邏輯錯誤還是其他錯誤,請高手指點指點!!!


回複討論(解決方案)

Array
(
[where] => name>10
)
為什麼 $param 要賦值給 $sql_param_list["field"] ?
你的 $param 是 "name>10" 裡面並沒有“,”
只有 if(preg_match("/\b(".$where_field.")\b/i", $param)||preg_match("/(>|>|=)/i", $param)){//
分支能進入

Array
(
[where] => name>10
)
為什麼 $param 要賦值給 $sql_param_list["field"] ?
你的 $param 是 "name>10" 裡面並沒有“,”
只有 if(preg_match("/\b(".$where_field.")\b/i", $param)||preg_match("/(>|>|=)/i", $param)){//
分支能進入

代碼修改過了 $param="name",主要是出現單個字元或字串時,直接給$sql_param_list["field"]賦值為$param

 }elseif(preg_match("/\b(order|limit|group|)\b/i", $param,$param_name)){//判斷order|limit|group==> "/\b(order|limit|group)\b/i",  //正則多了個或

if(false!==strpos($param,",")){//判斷是否存在“,”
那就更不對了,單個名字不會有“,”的

按照 SQL 指令的文法範式
你應該逐次讀取以空格符分隔的子串,判斷它屬於哪個文法成分
並且 SQL 指令的每一節都是有特定標識的

if(false!==strpos($param,",")){//判斷是否存在“,”
那就更不對了,單個名字不會有“,”的

按照 SQL 指令的文法範式
你應該逐次讀取以空格符分隔的子串,判斷它屬於哪個文法成分
並且 SQL 指令的每一節都是有特定標識的


恩 規則是判斷是否有",",有直接定義為field 並給每個索引值加“`”。沒有判斷包含where的,之後其他sql語句關鍵字。單個的字串直接給field 並加“`”。

練習中,如果過有好的建議,請聯絡我,謝謝



 }elseif(preg_match("/\b(order|limit|group|)\b/i", $param,$param_name)){//判斷order|limit|group==> "/\b(order|limit|group)\b/i",  //正則多了個或


謝謝 剛看Regex,還不熟悉

/**    * 參數設定    *     *      (1)參數為字串    *          1、帶有“,”的如“id,name”或不帶逗號的單個字元如“name”    *            定義為field參數。    *          2、帶有\b(count|avg)\b\((\*|[a-zA-Z_])+\)等sql    *          2、字串中帶有where、in、>、<、=、like、or、and 定義為where.    *          3、字串中帶有 order by定義為order。    *          4、字串中帶有 limit 定義為limit    *       (2)參數為數組    *            一維數組:如array("name","id"),定義為field    *                   如array("name"=>"admin","id"="1")鍵名定義為where。    * @param string/array $param     */   protected function setSqlParam($param){            //P($param);     $field_func="COUNT|AVG|FIRST|LAST|MAX|MIN|SUM|TOP";     $where_field="Where|>|<|=|or|xor|and|in";     if(is_string($param)){//判斷是否為字串     if('*'==$param){        $this->sql_param_list["field"] = '*';     }elseif(false!==strpos($param,",")){//判斷是否存在“,”        $field = explode(",", $param);        array_walk($field,array($this,"setKey"));//加反引號        $field = implode(",",$field);        $this->sql_param_list["field"] = $field;     }else{     //P($param);         if(preg_match("/\b(".strtolower($field_func).")\b\((\*|[a-zA-Z_`])+\)/i", $param)){         $this->sql_param_list["field"] =$param;         //break;         }elseif(preg_match("/(".$where_field.")/i", $param)||preg_match("/(>|<|=)/i", $param)){//判斷where         $this->sql_param_list["where"] =$this->safe($param);         //break;         }elseif(preg_match("/\b(order|limit|group)\b/i", $param,$param_name)){//判斷order|limit|group              switch ($param_name[0]){                case "order" : $this->sql_param_list["order"] =$param;                break;                case "limit" : $this->sql_param_list["limit"] =$param;                break;                case "group" : $this->sql_param_list["group"] =$param;                break;                              }         }else{         P($param);            $this->sql_param_list["field"] =$param;         }         //P($param);     }     }elseif(is_array($param)){//判斷是否為數組      if(count($param)==1){      $key=array_keys($param);      $values=array_values($param);      $fields = $key[0];         if(is_integer($fields)){         if(preg_match("/(".$where_field.")/i", $values[0])){            $this->sql_param_list["where"]=$values[0];         }else{           $this->sql_param_list["field"]=self::setKey($values[0]);         }         }else{           $this->sql_param_list["where"]=self::setKey($fields)."={$param[$key[0]]}";         }            //P($param);      }else{         P($param);      }     }else{//非法輸入        exit("ERROR!");     }   }
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.