2015-10-14 91 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