2015-10-14 88 views
0

可以我叫人這是有益的溶液 (值被傳遞給bindParam()中的foreach如下: $ var_value = & $行[ 'VAL'] ;) 還是更好的解決方案呢?PHP PDO bindParam()寬度2維陣列 - foreach循環

我有陣列例如:

$array['city']['val']  = $city; //city value passed to bindParam() 
$array['city']['type']  = 'string'; //type passed to bindParam() 
$array['city_id']['val']  = $city_id; 
$array['city_id']['type'] = 'int';  

$query = "update cities set city=:city where city_id=:city_id"; 

功能綁定參數:預先

+0

您可以隨時把參數作爲'執行陣列()'。 – frz3993

+0

我首選bindParam(),以防我需要放入data_type參數 – petran

+0

在這種情況下,循環是唯一的方法。 – frz3993

回答

0

都能跟得上

function BindParameters($array,$query) { 

     $st = $this->dbc->prepare($query); 

     if (is_array($array) && count($array)>0) { 

      foreach ($array as $key=> $row) { 

       if (isset($row['type'])) { 
        $var_type = $row['type']; 
       } else { 
        $var_type = ''; 
       } 

       $var_value = &$row['val']; 

       if ($var_type=='int') { 
        $var_type = PDO::PARAM_INT; 
       } else if ($var_type=='string') { 
        $var_type = PDO::PARAM_STR; 
       } else if ($var_type=='null') { 
        $var_type = PDO::PARAM_NULL; 
       } else { 
        $var_type = PDO::PARAM_STR; 
       } 
       $st->bindParam(':'.$key,$var_value,$var_type); 
      } 
     } 
     $st->execute(); 
     return $st; 
    } 

謝謝,這個解決方案是不好的。這是不方便和容易出錯的。
是的,有運行規則查詢一個更好的解決方案:

只要有你的數據在陣列這樣

$array['city'] = $city; 
$array['city_id'] = $city_id; 

,然後直接發送到​​:

$query = "update cities set city=:city where city_id=:city_id"; 
$pdo->prepare($query)->execute($array); 

這是全部您需要運行此查詢的代碼,不需要笨拙的​​函數。

只要你保留PDO::ATTR_EMULATE_PREPARESfalse,這種方法不會給你帶來任何麻煩。

對於常規的SQL查詢,你永遠不需要bindParam()nor it's third parameter

因此,啓用此功能,因爲這

function run($query, $array = NULL) { 

    $st = $this->dbc->prepare($query); 
    $st->execute($array); 
    return $st; 
} 
+0

,當它更好或我需要使用它的寬度data_type參數?因爲Iam在這種情況下將值傳遞給execute() – petran